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 tek bir işlemci üzerinde çalışır: uygulama işlemcisi (AP). AP, oyun gibi ekran açık kullanım alanlarında mükemmel performans sunmak için 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önetebilir 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 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 boşaltmasını, pilden tasarruf etmesini ve kullanıcı deneyiminin çeşitli alanlarını iyileştirmesini kolaylaştırır. Ayrıca, özellikle ortam algılamaya makine öğreniminin uygulanmasını içeren her zaman açık, bağlama duyarlı özellikler sınıfını etkinleştirir.
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 edilir. 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.
Genel olarak, CHRE ve bir bütün olarak Android arasında paralellikler çizilebilir. Ancak, 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.
- CHRE, kaynak kısıtlamaları ve güvenlik sınırlamaları nedeniyle rastgele üçüncü taraf Android uygulamalarının kullanımına 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
Bağlam Merkezi HAL'si
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 kullanılabilir 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ıldığında ContextHubService, cihazda herhangi bir 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 nanouygulama 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 aracılığıyla 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 durumlarda CHRE Android'den
bağımsız olarak yeniden başlatılır. HAL, yalnızca CHRE yeniden başlatıldıktan sonra (ör. queryApps()
) yeni istekleri kabul edebileceği zamana kadar göndermesi gereken RESTARTED
etkinliği aracılığıyla Android'i bu durumdan haberdar eder.
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 derlenirken CHRE'de çalışan kod, özel bir araç zincirine ihtiyaç duyma gibi Android derleme sistemiyle uyumluluğunu engelleyen 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 yapı 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, kullanım amacına ulaşmak için API 1.3'teki özelliklerin gerekli olup olmadığını veya çalışabilmesi için muhtemelen özellik azaltma işleminin uygulanıp uygulanmayacağını 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.
Ana sürüm, ikili program uyumluluğunu gösterirken alt 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ı ayrıca chreGetVersion()
üzerinden platforma özel bir yama sürümü de sunar. Bu yama, uygulamada ne zaman hata düzeltmelerinin veya küçük güncellemelerin yapıldığını gösterir.
Sürüm 1.0 (Android 7)
Sensörler ve etkinlikler ile zamanlayıcılar gibi temel nano uygulama özellikleri için destek içerir.
Sürüm 1.1 (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.
Sürüm 1.4 (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ükleyip kaldırma olanağıdır.
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 (örneğin,
malloc
,calloc
,realloc
,free
,operator new
) ve yapısı gereği dinamik ayırma (ör.std::unique_ptr
) kullanan diğer standart kitaplık işlevleri aracılığıyla dinamik bellek ayırma - 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
, Android logcat sistemini hedefleyen hata ayıklama günlük kaydı için kullanılabilir. Burada daha geleneksel bir programda printf
veya std::cout
kullanılabilir.
Buna karşılık, bazı standart kitaplık özellikleri gereklidir. Bunları nano uygulama ikili programına dahil etmek için statik kitaplıklar aracılığıyla veya nano uygulama 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ığı: Genellikle kullanılan tek duyarlıklı 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, kablosuz donanım yazılımı tarafından bağlantı amacıyla gerçekleştirilen ve genellikle güç nedeniyle AP'ye iletilmeyen kablosuz tarama sonuçlarını dinleyebilir. 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, hizmet veren hücre ve komşuları için hücre tanımlama bilgilerini alma olanağı sağlar. Bu bilgiler genellikle kaba tanımlı konum amacıyla kullanılır.
Ses
CHRE, genellikle SoundTrigger HAL'yi uygulamak için kullanılan donanımdan yararlanan düşük güçlü bir mikrofondan gelen ses verilerini toplu olarak 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
projesindeki 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. Tedarikçiye özgü özelliklerle özelleştirilebilir ve 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.