Bağlam Merkezi Çalışma Zamanı Ortamı (CHRE)

Akıllı telefonlarda, her biri farklı görevleri yerine getirmek için optimize edilmiş çeşitli işlemciler bulunur. Ancak Android yalnızca bir işlemcide çalışır: uygulamalar işlemcisi (AP). AP, oyun gibi ekran açıkken kullanım durumlarında mükemmel performans sunacak şekilde ayarlanmıştır ancak ekran kapalıyken bile sürekli olarak kısa ve sık işlemeler gerektiren özellikleri desteklemek için çok fazla güç tüketir. Daha küçük işlemciler bu iş yüklerini daha verimli bir şekilde işleyebilir ve görevlerini pil ömrünü önemli ölçüde etkilemeden tamamlayabilir. Ancak bu düşük güçlü işlemcilerdeki yazılım ortamları daha sınırlıdır ve büyük ölçüde değişiklik gösterebilir. Bu da platformlar arası geliştirmeyi zorlaştırır.

Context Hub Runtime Environment (CHRE), uygulamaları düşük güçlü bir işlemcide çalıştırmak için basit, standartlaştırılmış ve yerleştirilmiş sistemlere uygun bir API ile ortak bir platform sağlar. CHRE, cihaz OEM'lerinin ve güvenilir iş ortaklarının, pil tasarrufu sağlamak ve kullanıcı deneyiminin çeşitli alanlarını iyileştirmek için AP'den işlem yükünü boşaltmasını ve özellikle makine öğreniminin ortam algılamaya uygulanmasını içeren, her zaman açık ve bağlama duyarlı özellikler sınıfını etkinleştirmesini kolaylaştırır.

Temel kavramlar

CHRE, nano uygulamalar adı verilen küçük yerel uygulamaların düşük güçlü bir işlemcide yürütüldüğü ve ortak CHRE API aracılığıyla temel sistemle etkileşimde bulunduğu yazılım ortamıdır. CHRE API'lerinin doğru şekilde uygulanmasını hızlandırmak için AOSP'ye CHRE'nin platformlar arası referans uygulaması dahil edilmiştir. Referans uygulaması, bir dizi platform soyutlama katmanı (PAL) aracılığıyla temel donanım ve yazılıma yönelik ortak kod ve soyutlamalar içerir. Nano uygulamalar neredeyse her zaman Android'de çalışan bir veya daha fazla istemci uygulamasına bağlıdır. Bu uygulamalar, CHRE ve nano uygulamalarla sınırlı erişimli ContextHubManager sistem API'leri aracılığıyla etkileşim kurar.

CHRE'nin mimarisi ile Android'in genel mimarisi arasında üst düzeyde benzerlikler vardır. Ancak, birkaç önemli fark vardır:

  • CHRE yalnızca yerel kodda (C veya C++) geliştirilen nano uygulamaların çalıştırılmasını destekler. Java desteklenmez.
  • Kaynak kısıtlamaları ve güvenlik sınırlamaları nedeniyle CHRE, rastgele üçüncü taraf Android uygulamaları tarafından kullanılamaz. Yalnızca sisteme güvenilen uygulamalar bu verilere erişebilir.

Ayrıca CHRE kavramı ile sensör merkezi arasında önemli bir fark vardır. Sensör hub'ı ve CHRE'yi uygulamak için aynı donanımı kullanmak yaygın olsa da CHRE'nin kendisi Android Sensors HAL'nin gerektirdiği sensör özelliklerini sağlamaz. CHRE, Context Hub HAL'ye bağlıdır ve AP'yi dahil etmeden sensör verilerini almak için cihaza özgü bir sensör çerçevesinin istemcisi olarak hareket eder.

CHRE çerçeve mimarisi

Şekil 1. CHRE çerçeve mimarisi

Context Hub HAL

Context Hub donanım soyutlama katmanı (HAL), Android çerçevesi ile cihazın CHRE uygulaması arasındaki arayüzdür ve hardware/interfaces/contexthub konumunda tanımlanır. Context Hub HAL, Android çerçevesinin kullanılabilir bağlam merkezlerini ve nano uygulamalarını keşfettiği, mesaj iletme yoluyla bu nano uygulamalarla etkileşim kurduğu ve nano uygulamaların yüklenip kaldırılmasına izin verdiği API'leri tanımlar. CHRE'nin referans uygulamasıyla çalışan Context Hub HAL'ın referans uygulaması system/chre/host adresinde mevcuttur.

Bu doküman ile HAL tanımı arasında çakışma olması durumunda HAL tanımı öncelikli olacaktır.

Başlatma

Android başlatıldığında ContextHubService, cihazda bağlam hub'ı olup olmadığını belirlemek için getHubs() HAL işlevini çağırır. Bu, engelleyici ve tek seferlik bir çağrı olduğundan başlatmayı geciktirmemek için hızlıca tamamlanması ve doğru bir sonuç döndürmesi gerekir. Aksi takdirde yeni bağlam merkezleri daha sonra kullanılamaz.

Nano uygulamaları yükleme ve kaldırma

Bağlam hub'ı, cihaz görüntüsüne dahil edilen ve CHRE başladığında yüklenen bir dizi nano uygulamayı içerebilir. Bunlar önceden yüklenmiş nano uygulamalar olarak bilinir ve queryApps() ile ilgili ilk olası yanıta dahil edilmelidir.

Context Hub HAL, loadNanoApp() ve unloadNanoApp() işlevleri aracılığıyla nano uygulamaların çalışma zamanında dinamik olarak yüklenmesini ve kaldırılmasını da destekler. Nano uygulamalar, cihazın CHRE donanım ve yazılım uygulamasına özel bir ikili biçimde HAL'ye sağlanır.

Bir nano uygulamanın yüklenmesi için CHRE'yi çalıştıran işlemciye bağlı flash depolama gibi kalıcı olmayan belleğe yazılması gerekiyorsa CHRE uygulaması her zaman bu dinamik nano uygulamalar devre dışı durumda başlatılmalıdır. Bu, HAL üzerinden bir enableNanoapp() isteği alınana kadar nano uygulamanın kodunun hiçbirinin yürütülmeyeceği anlamına gelir. Önceden yüklenmiş nano uygulamalar etkin durumda başlatılabilir.

İçerik merkezi yeniden başlatma sayısı

CHRE'nin normal çalışma sırasında yeniden başlatılması beklenmese de eşlenmemiş bir bellek adresine erişme girişimi gibi beklenmedik durumlardan kurtulmak için yeniden başlatılması gerekebilir. Bu durumlarda CHRE, Android'den bağımsız olarak yeniden başlatılır. HAL, Android'i bu konuda RESTARTED etkinliği aracılığıyla bilgilendirir. Bu etkinlik, yalnızca CHRE queryApps() gibi yeni istekleri kabul edebilecek şekilde yeniden başlatıldıktan sonra gönderilmelidir.

CHRE sistemine genel bakış

CHRE, temel hesaplama biriminin bir nano uygulamanın etkinlik işleme giriş noktasına iletilen bir etkinlik olduğu, etkinliğe dayalı bir mimari üzerine tasarlanmıştır. CHRE çerçevesi çok iş parçacıklı olsa da belirli bir nano uygulama hiçbir zaman birden fazla iş parçacığından paralel olarak yürütülmez. CHRE çerçevesi, belirli bir nano uygulamayla üç nano uygulama giriş noktasından (nanoappStart(), nanoappHandleEvent() ve nanoappEnd()) biri aracılığıyla veya önceki bir CHRE API çağrısında sağlanan bir geri çağırma aracılığıyla etkileşime girer. Nano uygulamalar ise CHRE API aracılığıyla CHRE çerçevesi ve temel sistemle etkileşime girer. CHRE API, temel özelliklerin yanı sıra sensörler, GNSS, Wi-Fi, WWAN ve ses gibi bağlamsal sinyallere erişim için olanaklar sağlar. Ayrıca, tedarikçiye özel nano uygulamalar tarafından kullanılmak üzere tedarikçiye özel ek özelliklerle genişletilebilir.

Derleme sistemi

Context Hub HAL ve gerekli diğer AP tarafı bileşenleri Android ile birlikte oluşturulurken CHRE'de çalışan kodun, Android derleme sistemiyle uyumsuz olmasına neden olabilecek gereksinimleri olabilir. Örneğin, özel bir araç zincirine ihtiyaç duyabilir. Bu nedenle, AOSP'deki CHRE projesi, nano uygulamaları ve isteğe bağlı olarak CHRE çerçevesini sistemle entegre edilebilen kitaplıklara derlemek için GNU Make'e dayalı basitleştirilmiş bir derleme sistemi sağlar. CHRE desteği ekleyen cihaz üreticileri, hedef cihazları için derleme sistemi desteğini AOSP'ye entegre etmelidir.

CHRE API, C99 dil standardına göre yazılmıştır ve referans uygulama, kaynak sınırlı uygulamalar için uygun olan C++11'in kısıtlanmış bir alt kümesini kullanır.

CHRE API

CHRE API, bir nano uygulama ile sistem arasındaki yazılım arayüzünü tanımlayan C başlık dosyaları koleksiyonudur. CHRE'yi destekleyen tüm cihazlarda nano uygulamaların kodunun uyumlu olmasını sağlamak için tasarlanmıştır. Bu nedenle, nano uygulamaların kaynak kodunun yeni bir cihaz türünü desteklemek için değiştirilmesi gerekmez. Ancak hedef cihazın işlemci talimatı kümesi veya uygulama ikili arabirimi (ABI) için özel olarak yeniden derlenmesi gerekebilir. CHRE mimarisi ve API tasarımı, nano uygulamaların CHRE API'nin farklı sürümlerinde ikili uyumlu olmasını da sağlar. Bu da nano uygulamanın, derlendiği hedef API'ye kıyasla CHRE API'nin farklı bir sürümünü uygulayan bir sistemde çalışmak için yeniden derlenmesi gerekmediği anlamına gelir. Başka bir deyişle, CHRE API v1.3'ü destekleyen bir cihazda nano uygulama ikilisi çalıştırılırsa ve bu cihaz CHRE API v1.4'ü destekleyecek şekilde yükseltilirse aynı nano uygulama ikilisi çalışmaya devam eder. Benzer şekilde, nano uygulama CHRE API v1.2'de çalışabilir ve çalışma zamanında, kullanımını gerçekleştirmek için API v1.3'teki özelliklere ihtiyaç duyup duymadığını veya potansiyel olarak özelliklerin düzgün şekilde azaltılmasıyla çalışıp çalışamayacağını belirleyebilir.

CHRE API'nin yeni sürümleri Android ile birlikte yayınlanır. Ancak CHRE uygulaması tedarikçi uygulaması kapsamında olduğundan, bir cihazda desteklenen CHRE API sürümü Android sürümüyle bağlantılı olmayabilir.

Sürüm özeti

CHRE API, Android HIDL sürüm oluşturma şeması gibi anlamsal sürüm oluşturma yöntemini kullanır. Ana sürüm, ikili uyumluluğu gösterirken geriye dönük uyumlu özellikler kullanıma sunulduğunda ara sürüm artırılır. CHRE API'si, hangi sürümde bir işlevin veya parametrenin kullanıma sunulduğunu belirlemek için kaynak kodu açıklamaları içerir (ör. @since v1.1).

CHRE uygulaması, chreGetVersion() aracılığıyla platforma özel bir yama sürümünü de kullanıma sunar. Bu sürüm, uygulamada hata düzeltmeleri veya küçük güncellemeler yapıldığında gösterilir.

Her sürümün özetleri için version.h bölümüne bakın.

Zorunlu sistem özellikleri

Sensörler gibi bağlamsal sinyal kaynakları isteğe bağlı özellik alanları olarak sınıflandırılırken tüm CHRE uygulamalarında birkaç temel işlevin kullanılması gerekir. Bu, zamanlayıcı ayarlama, uygulama işlemcisindeki istemcilere mesaj gönderme ve istemcilerden mesaj alma, günlük kaydı gibi temel sistem API'lerini içerir. Tüm ayrıntılar için API üstbilgileri başlıklı makaleyi inceleyin.

CHRE API'de kodlanmış temel sistem özelliklerine ek olarak, Context Hub HAL düzeyinde belirtilen zorunlu CHRE sistem düzeyinde özellikler de vardır. Bunların en önemlisi, nano uygulamaları dinamik olarak yükleme ve kaldırma özelliğidir.

C/C++ standart kitaplığı

CHRE uygulamalarının, bellek kullanımını ve sistem karmaşıklığını en aza indirmek için yalnızca standart C ve C++ kitaplıklarının bir alt kümesini ve çalışma zamanı desteği gerektiren dil özelliklerini desteklemesi gerekir. Bu ilkeler doğrultusunda, bazı özellikler bellek ve kapsamlı işletim sistemi düzeyindeki bağımlılıkları nedeniyle, bazıları ise CHRE'ye özgü daha uygun API'lerle değiştirildikleri için açıkça hariç tutulur. Aşağıdaki özellikler, olası her durumu içermeyen bir liste olsa da nano uygulamalarda kullanılamaz:

  • C++ istisnaları ve çalışma zamanı tür bilgileri (RTTI)
  • C++11 başlıkları dahil olmak üzere standart kitaplıkta çoklu iş parçacığı desteği <thread>, <mutex>, <atomic>, <future>
  • C ve C++ Standart Giriş/Çıkış kitaplıkları
  • C++ Standart Şablon Kitaplığı (STL)
  • C++ Standart Normal İfadeler kitaplığı
  • Standart işlevler (örneğin, malloc, calloc, realloc, free, operator new) ve std::unique_ptr gibi dinamik tahsisatı doğal olarak kullanan diğer standart kitaplık işlevleri aracılığıyla dinamik bellek tahsisi
  • Yerelleştirme ve Unicode karakter desteği
  • Tarih ve saat kitaplıkları
  • <setjmp.h>, <signal.h>, abort, std::terminate gibi normal program akışını değiştiren işlevler
  • system ve getenv dahil olmak üzere ana makine ortamına erişme
  • C99 veya C++11 dil standartlarına dahil edilmeyen POSIX ve diğer kitaplıklar

Çoğu durumda, CHRE API işlevleri ve yardımcı kitaplıklar aracılığıyla eşdeğer özellikler kullanılabilir. Örneğin, daha geleneksel bir programın printf veya std::cout kullandığı Android logcat sistemine yönelik hata ayıklama günlüğü için chreLog kullanılabilir.

Buna karşılık, bazı standart kitaplık özellikleri gereklidir. Bunları, nano uygulama ikilisine dahil etmek için statik kitaplıklar aracılığıyla veya nano uygulama ile sistem arasında dinamik bağlantı oluşturarak kullanıma sunmak platform uygulamasının sorumluluğundadır. Bu, aşağıdakileri kapsar ancak bunlarla sınırlı değildir:

  • Dize ve dizi yardımcı programları: memcmp, memcpy, memmove, memset, strlen
  • Matematik kitaplığı: Sık kullanılan tek duyarlıklı kayan nokta işlevleri:

    • Temel işlemler: ceilf, fabsf, floorf, fmaxf, fminf, fmodf, roundf, lroundf, remainderf
    • Üstel ve kuvvet işlevleri: expf, log2f, powf, sqrtf
    • Trigonometrik ve hiperbolik işlevler: sinf, cosf, tanf, asinf, acosf, atan2f, tanhf

Bazı temel platformlar ek özellikleri desteklese de nano uygulamalar, harici bağımlılıklarını CHRE API işlevleriyle ve onaylanmış standart kitaplık işlevleriyle sınırlandırmadığı sürece CHRE uygulamaları arasında taşınabilir olarak kabul edilmez.

İsteğe bağlı özellikler

CHRE API, donanım ve yazılımı tanıtmak için özellik alanlarına ayrılmıştır. Bu alanlar, API açısından isteğe bağlı olarak kabul edilir. Bu özellikler, uyumlu bir CHRE uygulamasını desteklemek için gerekli olmasa da belirli bir nano uygulamayı desteklemek için gerekli olabilir. Bir platform belirli bir API grubunu desteklemese bile bu işlevlere referans veren nano uygulamaların oluşturulabilmesi ve yüklenebilmesi gerekir.

Sensörler

CHRE API, ivme ölçer, jiroskop, manyetometre, ortam ışığı sensörü ve yakınlık sensörü gibi sensörlerden veri isteme olanağı sağlar. Bu API'ler, güç tüketimini azaltmak için sensör örneklerinin toplu işlenmesi desteği de dahil olmak üzere Android Sensors API'lerine benzer bir özellik seti sağlamayı amaçlamaktadır. CHRE'de sensör verilerinin işlenmesi, hareket sinyallerinin AP'de çalıştırılmasına kıyasla çok daha düşük güçle ve daha düşük gecikmeyle işlenmesini sağlar.

GNSS

CHRE, GPS ve diğer uydu takımyıldızları da dahil olmak üzere küresel bir navigasyon uydu sisteminden (GNSS) konum verileri istemek için API'ler sağlar. Bu, her ikisi de bağımsız özellikler olmasına rağmen, ham ölçüm verilerinin yanı sıra periyodik konum düzeltmeleri için yapılan istekleri de içerir. CHRE, GNSS alt sistemiyle doğrudan bağlantıya sahip olduğundan AP, konum oturumunun tüm yaşam döngüsü boyunca uyku modunda kalabilir. Bu nedenle, AP tabanlı GNSS isteklerine kıyasla güç tüketimi azalır.

Kablosuz bağlantı

CHRE, öncelikle konum belirleme amacıyla Wi-Fi çipiyle etkileşim kurma olanağı sağlar. GNSS açık hava konumları için iyi sonuçlar verse de kablosuz ağ taramalarının sonuçları kapalı alanlarda ve gelişmiş bölgelerde doğru konum bilgisi sağlayabilir. CHRE, tarama için AP'yi uyandırma maliyetinden kaçınmanın yanı sıra bağlantı amacıyla Wi-Fi donanımı tarafından gerçekleştirilen ve genellikle güç nedeniyle AP'ye iletilmeyen Wi-Fi taramalarının sonuçlarını da dinleyebilir. Bağlantı taramalarını bağlamsal amaçlarla kullanmak, gerçekleştirilen toplam kablosuz tarama sayısını azaltarak güç tasarrufu yapmaya yardımcı olur.

CHRE API v1.1'de, tarama sonuçlarını izleme ve isteğe bağlı olarak tarama başlatma özelliği de dahil olmak üzere Wi-Fi desteği eklendi. Bu özellikler, v1.2'de gidiş dönüş süresi (RTT) ölçümleri yapma özelliğiyle genişletildi. Bu özellik, göreceli konumun doğru şekilde belirlenmesini sağlayan, özelliği destekleyen erişim noktalarına karşı ölçüm yapılmasına olanak tanır.

WWAN

CHRE API, hizmet veren hücre ve komşuları için hücre tanımlama bilgilerini alabilme olanağı sunar. Bu bilgiler genellikle kaba konum amaçları için kullanılır.

Ses

CHRE, genellikle SoundTrigger HAL'yi uygulamak için kullanılan donanımdan yararlanan düşük güç tüketen bir mikrofondan gelen ses verisi gruplarını işleyebilir. CHRE'de ses verilerinin işlenmesi, bu verilerin hareket sensörleri gibi diğer verilerle birleştirilmesini sağlayabilir.

Bluetooth

CHRE, düşük güçle boşaltma özelliğinden yararlanan Bluetooth işlevlerinin bir alt kümesini destekleyen API'ler sağlar. CHRE, nano uygulamaların BLE taramaları yapmasına, RSSI'yi izlemesine ve AP'yi uyandırmadan BLE reklam verilerini işlemesine olanak tanır. Ayrıca, kurulu bir Bluetooth soket bağlantısının sahipliği, bakım için daha az enerji gerektiren ve nano uygulamaların boşaltılmış BDE soket bağlantısı üzerinden iletişim kurmasına olanak tanıyan boşaltma alanına taşınabilir.

Referans uygulama

CHRE çerçevesinin referans kodu, AOSP'deki system/chre projesinde yer alır ve C++11'de uygulanır. Kesinlikle gerekli olmasa da tutarlılığı sağlamak ve yeni özelliklerin daha hızlı benimsenmesine yardımcı olmak için tüm CHRE uygulamalarının bu kod tabanına dayanması önerilir. Bu kod, uygulamaların kullandığı API'lerin açık kaynaklı bir uygulaması olması, uyumluluk için temel ve standart olarak hizmet vermesi açısından temel Android çerçevesinin bir benzeri olarak görülebilir. Satıcıya özel özelliklerle özelleştirilip genişletilebilse de ortak kodun referansa mümkün olduğunca yakın tutulması önerilir. Android'deki HAL'lere benzer şekilde, CHRE referans uygulaması, minimum gereksinimleri karşılayan herhangi bir cihaza uyarlanabilmesi için çeşitli platform soyutlamalarını kullanır.

Teknik ayrıntılar ve taşıma kılavuzu için system/chre projesinde yer alan README dosyasına bakın.