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 sık ve kısa işlem patlamaları 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şime girer.
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.
1. şekil. 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'nin referans uygulamasına system/chre/host
adresinden ulaşabilirsiniz.
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şlatma işleminin gecikmesini önlemek için hızlıca tamamlanması ve doğru bir sonuç döndürmesi gerekir. Aksi takdirde yeni bağlam merkezleri 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ı beklenmez ancak 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, bir nano uygulamanın etkinlik işleme giriş noktasına iletilen bir etkinliğin temel hesaplama birimi 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ının bir 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 özelliklerde sorunsuz bir şekilde düşüşle ç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ına dahil 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 numarası atama şeması gibi anlamsal sürüm numarası atama 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.
Sürüm 1.0 (Android 7)
Sensörler ile etkinlikler ve zamanlayıcılar gibi temel nano uygulama özellikleri desteklenir.
Sürüm 1.1 (Android 8)
GNSS konumu ve ham ölçümler, kablosuz ağ tarama ve mobil ağ bilgileri aracılığıyla konum özellikleri sunar. Ayrıca nano uygulamalar arası iletişimi etkinleştirmek için genel iyileştirmeler ve başka geliştirmeler içerir.
Sürüm 1.2 (Android 9)
Düşük güçte mikrofon, kablosuz RTT aralığı, AP uyandırma ve uyutma bildirimleri gibi kaynaklardan alınan veriler için destek ekler ve başka iyileştirmeler yapar.
Sürüm 1.3 (Android 10)
Sensör kalibrasyon verileriyle ilgili özellikleri geliştirir, toplu sensör verilerinin isteğe bağlı olarak temizlenmesi için destek ekler, adım algılama sensör türünü tanımlar ve GNSS konum etkinliklerini ek doğruluk alanlarıyla genişletir.
Sürüm 1.4 (Android 11)
5G hücresel bilgileri, nano uygulama hata ayıklama dökümü ve diğer iyileştirmeler için destek eklenir.
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 bazı temel işlevlerin 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 bellekleri 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
) vestd::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şlevlersystem
vegetenv
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ı program 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 özelliklerinin kullanılması zorunludur. 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
- Temel işlemler:
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 yazılı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 tetikleme ö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.
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.