Akıllı telefonlar, her biri farklı görevleri gerçekleştirmek için optimize edilmiş bir dizi işlemci içerir. Ancak Android yalnızca bir işlemcide çalışır: uygulama işlemcisi (AP). AP, oyun gibi ekran açık kullanım alanları için mükemmel performans sunacak şekilde ayarlanmıştır ancak ekran kapalıyken bile sürekli olarak sık ve kısa işlem süreleri gerektiren özellikleri desteklemek için çok fazla güç tüketir. Daha küçük işlemciler, bu iş yüklerini daha verimli bir şekilde yöneterek 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 platformlar arası geliştirmeyi zorlaştıracak şekilde büyük ölçüde değişiklik gösterebilir.
Context Hub Runtime Environment (CHRE), basit, standartlaştırılmış ve yerleşik uyumlu bir API ile uygulamaları düşük güçlü bir işlemcide çalıştırmak için ortak bir platform sağlar. CHRE, cihaz OEM'lerinin ve güvenilir iş ortaklarının işlem yükünü AP'den almasını, pil tasarrufu yapmasını, kullanıcı deneyiminin çeşitli alanlarını iyileştirmesini ve her zaman açık, bağlama duyarlı bir özellik sınıfını (özellikle de ortam algılamasına makine öğrenimi uygulamasını içerenler) 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 çalıştığı ve ortak CHRE API'si aracılığıyla temel sistemle etkileşim kurduğ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 uygulama, 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, kısıtlanmış erişim ContextHubManager
sistem API'leri aracılığıyla CHRE ve nano uygulamalarla etkileşim kurar.
CHRE'nin mimarisi ile Android'in tamamı arasında genel olarak paralellikler kurulabilir. Ancak aralarında birkaç önemli fark vardır:
- CHRE yalnızca yerel kodda (C veya C++) geliştirilmiş 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ılmak üzere açık değildir. Yalnızca sistem tarafından güvenilen uygulamalar bu alana erişebilir.
CHRE kavramı ile sensör merkezi arasında da önemli bir fark vardır. Sensör merkezini ve CHRE'yi uygulamak için aynı donanımın kullanılması yaygın olsa da CHRE, Android Sensörler HAL tarafından gereken sensör özelliklerini sağlamaz. CHRE, Context Hub HAL'e bağlıdır ve AP'yi dahil etmeden sensör verilerini almak için cihaza özgü bir sensör çerçevesinin istemcisi gibi davranır.
Ş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
adresinde tanımlanır.
Context Hub HAL, Android çerçevesinin mevcut bağlam merkezlerini ve nano uygulamalarını keşfettiği, mesaj aktarımı yoluyla bu nano uygulamalarla etkileşime geçtiği ve nano uygulamaların yüklenmesine ve kaldırılmasına olanak tanıdığı API'leri tanımlar. CHRE'nin referans uygulamasıyla çalışan Context Hub HAL'in referans uygulamasını system/chre/host
adresinden indirebilirsiniz.
Bu dokümanlar ile HAL tanımı arasında bir uyuşmazlık olması durumunda HAL tanımı öncelikli olur.
Başlatma
Android başlatılırken ContextHubService, cihazda bağlam merkezi olup olmadığını belirlemek için getHubs()
HAL işlevini çağırır. Bu, engelleyen ve tek seferlik bir çağrı olduğundan, önyüklemenin gecikmesini önlemek için hızlı bir şekilde tamamlanmalı ve daha sonra yeni bağlam merkezleri eklenemeyeceği için doğru bir sonuç döndürmelidir.
Nano uygulamaları yükleme ve kaldırma
Bağlam merkezi, cihaz görüntüsüne dahil edilen ve CHRE başladığında yüklenen bir dizi nano uygulama içerebilir. Bunlar önceden yüklenmiş nano uygulamalar olarak bilinir ve queryApps()
için mümkün olan ilk yanıta dahil edilmelidir.
Context Hub HAL, loadNanoApp()
ve unloadNanoApp()
işlevleri aracılığıyla nano uygulamaları çalışma zamanında dinamik olarak yüklemeyi ve kaldırmayı da destekler. Nano uygulamalar, HAL'e cihazın CHRE donanım ve yazılım uygulamasına özgü bir ikili biçimde sağlanır.
Bir nano uygulamanın yüklenmesi, CHRE'yi çalıştıran işlemciye bağlı flash depolama gibi kalıcı olmayan bir belleğe yazmayı içeriyorsa CHRE uygulaması her zaman bu dinamik nano uygulamaları devre dışı durumda başlatmalıdır. Bu, HAL üzerinden bir enableNanoapp()
isteği alınana kadar nano uygulamanın kodunun hiçbirinin yürütülmediği anlamına gelir. Önceden yüklenmiş nano uygulamalar etkin durumda başlatılabilir.
İçerik merkezi yeniden başlatılıyor
CHRE'nin normal çalışma sırasında yeniden başlatılması beklenmez ancak haritalanmamış bir bellek adresine erişim denemesi gibi beklenmedik durumlardan kurtarılması gerekebilir. Bu gibi durumlarda CHRE, Android'den bağımsız olarak yeniden başlatılır. HAL, RESTARTED
etkinliği aracılığıyla Android'i bu durumdan haberdar eder. Bu etkinliği yalnızca CHRE, queryApps()
gibi yeni istekleri kabul edebilecek şekilde yeniden başlatıldıktan sonra göndermesi gerekir.
CHRE sistemine genel bakış
CHRE, birincil hesaplama biriminin bir nano uygulamanın etkinlik işleme giriş noktasına iletilen bir etkinlik olduğu etkinlik odaklı bir mimari etrafında tasarlanmıştır. CHRE çerçevesi çoklu iş parçacıklı olabilir ancak belirli bir nano uygulama hiçbir zaman paralel olarak birden fazla iş parçacığında yürütülmez. CHRE çerçevesi, üç 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 işlevi aracılığıyla belirli bir nano uygulamayla etkileşim kurar. Nano uygulamalar ise CHRE API aracılığıyla CHRE çerçevesi ve temel sistemle etkileşim kurar. CHRE API, sensörler, GNSS, kablosuz ağ, geniş bant kablosuz ağ ve ses gibi bağlamsal sinyallere erişmek için bir dizi temel özellik ve olanak sağlar. Ayrıca, tedarikçiye özgü nano uygulamalar tarafından kullanılmak üzere tedarikçiye özgü ek özelliklerle genişletilebilir.
Derleme sistemi
Context Hub HAL ve gerekli diğer AP taraflı bileşenler Android ile birlikte oluşturulsa da CHRE'de çalışan kod, özel bir araç zincirine ihtiyaç duyma gibi Android derleme sistemiyle uyumsuzluk yaratan koşullara sahip olabilir. Bu nedenle, AOSP'teki CHRE projesi, nano uygulamaları ve isteğe bağlı olarak CHRE çerçevesini sistemle entegre edilebilecek 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'si C99 dil standardına göre yazılmıştır ve referans uygulamada, kaynak sınırlı uygulamalara uygun C++11'in kısıtlanmış bir alt kümesi kullanılı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ından oluşan bir koleksiyondur. CHRE'yi destekleyen tüm cihazlarda nano uygulama kodunun uyumlu olmasını sağlamak için tasarlanmıştır. Yani nano uygulamanın kaynak kodunun yeni bir cihaz türünü desteklemek için değiştirilmesi gerekmez. Ancak hedef cihazın işlemci talimat seti veya uygulama ikili arayüzü (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, nano uygulamanın derlendiği hedef API'ye kıyasla CHRE API'nin farklı bir sürümünü uygulayan bir sistemde çalışabilmesi için yeniden derlenmesi gerekmediği anlamına gelir. Diğer bir deyişle, bir nano uygulama ikili dosyası CHRE API 1.3 sürümünü destekleyen bir cihazda çalışıyorsa ve bu cihaz CHRE API 1.4 sürümünü destekleyecek şekilde yükseltilirse aynı nano uygulama ikili dosyası çalışmaya devam eder. Benzer şekilde, nano uygulama CHRE API 1.2 sürümünde çalışabilir ve çalışma zamanında, amacına ulaşmak için API 1.3'teki özelliklerin gerekli olup olmadığını veya çalışabilmesinin mümkün olup olmadığını (potansiyel olarak özellik azaltma işlemiyle) belirleyebilir.
CHRE API'nin yeni sürümleri Android ile birlikte yayınlanır. Ancak CHRE uygulaması, tedarikçi uygulamasının bir parçası olduğundan bir cihazda desteklenen CHRE API sürümü, Android sürümüne bağlı olmayabilir.
Sürüm özeti
Android HIDL sürüm numaralandırma şeması gibi CHRE API de anlamsal sürüm numaralandırmayı izler.
Büyük sürüm, ikili uyumluluğu gösterirken küçük sürüm, geriye dönük uyumlu özellikler kullanıma sunulduğunda artırılır. CHRE API'si, bir işlevi veya parametreyi (ör. @since v1.1
) hangi sürümün kullanıma sunduğuna dair kaynak kod ek açıklamaları içerir.
CHRE uygulaması, chreGetVersion()
aracılığıyla platforma özel bir yama sürümünü de gösterir. Bu sürüm, uygulamada ne zaman hata düzeltmeleri veya küçük güncellemeler yapıldığını belirtir.
1.0 sürümü (Android 7)
Sensörler ve etkinlikler ile zamanlayıcılar gibi temel nano uygulama özellikleri için destek içerir.
1.1 sürümü (Android 8)
GNSS konumu ve ham ölçümler, kablosuz ağ taraması ve mobil ağ bilgileri aracılığıyla konum özelliklerini kullanıma sunar. Ayrıca nano uygulamadan nano uygulamaya iletişimi etkinleştirmek için genel iyileştirmeler ve diğer iyileştirmeler de sunar.
1.2 sürümü (Android 9)
Düşük güç tüketimi olan mikrofonlardan gelen veriler, kablosuz ağ RTT menzili, AP uyanma ve uyku bildirimleri ve diğer iyileştirmeler için destek ekler.
1.3 sürümü (Android 10)
Sensör kalibrasyon verileriyle ilgili özellikleri iyileştirir, isteğe bağlı olarak toplu sensör verilerini temizleme desteği ekler, adım algılama sensörü türünü tanımlar ve GNSS konum etkinliklerini ek doğruluk alanlarıyla genişletir.
1.4 sürümü (Android 11)
5G hücre bilgileri, nano uygulama hata ayıklama dökümü ve diğer iyileştirmeler için destek eklendi.
Zorunlu sistem özellikleri
Sensörler gibi bağlamsal sinyal kaynakları isteğe bağlı özellik alanlarına ayrılsa da tüm CHRE uygulamalarında birkaç temel işlev gereklidir. Zamanlayıcı ayarlama, uygulama işlemcisinde istemcilere mesaj gönderme ve alma, günlük kaydı ve diğerleri gibi temel sistem API'leri buna dahildir. Ayrıntılı bilgi için API üstbilgileri başlıklı makaleyi inceleyin.
CHRE API'de kodlanmış temel sistem özelliklerine ek olarak, Context Hub HAL düzeyinde zorunlu CHRE sistem düzeyi özellikleri de vardır. Bunların en önemlisi, nano uygulamaları dinamik olarak yükleme ve kaldırma özelliğidir.
C/C++ standart kitaplığı
Bellek kullanımını ve sistem karmaşıklığını en aza indirmek için CHRE uygulamalarının, standart C ve C++ kitaplıklarının ve çalışma zamanı desteği gerektiren dil özelliklerinin yalnızca bir alt kümesini desteklemesi gerekir. Bu ilkeler doğrultusunda, bazı özellikler bellek ve işletim sistemi düzeyinde geniş bağımlılıklarından dolayı, bazıları ise CHRE'ye özgü daha uygun API'lerle değiştirildikleri için açıkça hariç tutulur. Aşağıdaki özellikler, nano uygulamalara sunulmak üzere tasarlanmamıştır. Bu liste olası her durumu içermemektedir:
- C++ istisnaları ve çalışma zamanı tür bilgileri (RTTI)
- C++11 başlıkları
<thread>
,<mutex>
,<atomic>
,<future>
dahil olmak üzere standart kitaplık çoklu iş parçacığı desteği - C ve C++ Standart Giriş/Çıkış kitaplıkları
- C++ Standart Şablon Kitaplığı (STL)
- C++ Standart Normal İfadeler kitaplığı
- Standart işlevler (ör.
malloc
,calloc
,realloc
,free
,operator new
) vestd::unique_ptr
gibi dinamik atama kullanan diğer standart kitaplık işlevleri aracılığıyla dinamik bellek atama - Yerelleştirme ve Unicode karakter desteği
- Tarih ve saat kitaplıkları
<setjmp.h>
,<signal.h>
,abort
,std::terminate
dahil olmak üzere normal program akışını değiştiren işlevlersystem
,getenv
dahil olmak üzere barındırma ortamına erişme- POSIX ve C99 veya C++11 dil standartlarına dahil olmayan diğer kitaplıklar
Çoğu durumda, CHRE API işlevleri ve yardımcı program kitaplıklarından eşdeğer özellikler kullanılabilir. Örneğin, chreLog
, daha geleneksel bir programın printf
veya std::cout
kullanabileceği Android logcat sistemini hedefleyen hata ayıklama günlük kaydı için kullanılabilir.
Buna karşılık, bazı standart kitaplık özellikleri gereklidir. Bunları bir nanouygulama ikilisine dahil etmek için statik kitaplıklar aracılığıyla veya nanouygulama ile sistem arasında dinamik bağlantı oluşturarak göstermek platform uygulamasına bağlıdır. Bunlarla sınırlı olmamak üzere aşağıdakiler buna dahildir:
- Dize ve dizi yardımcı programları:
memcmp
,memcpy
,memmove
,memset
,strlen
Matematik kitaplığı: Sık kullanılan tek hassasiyetli kayan nokta işlevleri:
- Temel işlemler:
ceilf
,fabsf
,floorf
,fmaxf
,fminf
,fmodf
,roundf
,lroundf
,remainderf
- Üssel ve kuvvet işlevleri:
expf
,log2f
,powf
,sqrtf
- Trigonometrik ve hiperbolik fonksiyonlar:
sinf
,cosf
,tanf
,asinf
,acosf
,atan2f
,tanhf
- Temel işlemler:
Bazı temel platformlar ek özellikleri desteklese de harici bağımlılıkları CHRE API işlevlerine ve onaylanmış standart kitaplık işlevlerine kısıtlanmadığı sürece nano uygulamalar CHRE uygulamalarında taşınabilir olarak kabul edilmez.
İsteğe bağlı özellikler
Donanım ve yazılımı tanıtmak için CHRE API, API açısından isteğe bağlı olarak kabul edilen özellik alanlarına ayrılmıştır. Bu özellikler, uyumlu bir CHRE uygulamasını desteklemek için gerekli olmayabilir ancak belirli bir nano uygulamayı desteklemek için gerekli olabilir. Bir platform belirli bir API grubunu desteklemese bile bu işlevlere referans veren nano uygulamalar derlenip yüklenebilir olmalıdır.
Sensörler
CHRE API, ivme ölçer, jiroskop, manyetometre, ortam ışığı sensörü ve yakınlık gibi sensörlerden veri isteğinde bulunma olanağı sunar. Bu API'lerin amacı, güç tüketimini azaltmak için sensör örneklerinin toplu olarak alınması desteği de dahil olmak üzere Android Sensör API'lerine benzer bir özellik grubu sağlamaktır. Sensör verilerini CHRE içinde işlemek, AP'de çalıştırmaya kıyasla hareket sinyallerinin çok daha düşük güç ve 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 verisi istemek için API'ler sağlar. Bu, hem bağımsız özellikler olsa da periyodik konum düzeltme istekleri hem de ham ölçüm verilerini 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 uykuda kalabileceği için AP tabanlı GNSS isteklerine kıyasla güç tüketimi azalır.
Kablosuz bağlantı
CHRE, öncelikle konum amacıyla kablosuz çiple etkileşim kurma olanağı sağlar. GNSS, açık hava konumları için iyi çalışırken 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ırmanın maliyetinden kaçınmanın yanı sıra, bağlantı amacıyla kablosuz donanım yazılımı tarafından gerçekleştirilen kablosuz tarama sonuçlarını dinleyebilir. Bu sonuçlar, güç nedeniyle genellikle AP'ye iletilmez. Bağlantı taramalarından bağlamsal amaçlarla yararlanmak, yapılan toplam kablosuz tarama sayısını azaltarak güç tasarrufu sağlar.
Tarama sonuçlarını izleme ve isteğe bağlı olarak taramaları tetikleme özelliği de dahil olmak üzere CHRE API v1.1'e kablosuz bağlantı desteği eklendi. Bu özellikler, 1.2 sürümünde, özelliği destekleyen erişim noktalarına karşı Gidiş Dönüş Süresi (RTT) ölçümleri gerçekleştirme özelliğiyle genişletildi. Bu özellik, doğru göreli konum belirlemeyi sağlar.
WWAN
CHRE API, yayın yapan hücre ve komşuları için hücre tanımlama bilgilerini alma olanağı sunar. Bu bilgiler genellikle kaba konumlandırma amacıyla kullanılır.
Ses
CHRE, genellikle SoundTrigger HAL'i uygulamak için kullanılan donanımdan yararlanan düşük güçlü bir mikrofondan ses verisi gruplarını işleyebilir. CHRE'de ses verilerini işlemek, hareket sensörleri gibi diğer verilerle birleştirilmesini sağlayabilir.
Referans uygulama
CHRE çerçevesinin referans kodu, C++11'de uygulanan system/chre
projesinde AOSP'ye dahil edilmiştir. Kesinlikle gerekli olmasa da tutarlılığı sağlamak ve yeni özelliklerin benimsenmesini hızlandırmak için tüm CHRE uygulamalarının bu kod tabanını temel alması önerilir. Bu kod, uygulamaların kullandığı API'lerin açık kaynaklı bir uygulaması olduğu ve uyumluluk için temel ve standart görevi gördüğü için temel Android çerçevesine benzer bir yapı olarak görülebilir. Özelleştirilebilir ve tedarikçiye özgü özelliklerle genişletilebilir olsa da ortak kodun referansa mümkün olduğunca yakın tutulması önerilir. Android'in HAL'lerine benzer şekilde CHRE referans uygulaması, minimum gereksinimleri karşılayan tüm cihazlara uyarlanabilmesi için çeşitli platform soyutlamaları kullanır.
Teknik ayrıntılar ve taşıma kılavuzu için system/chre
projesine dahil edilen README dosyasını inceleyin.