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

Akıllı telefonlar, her biri farklı görevleri gerçekleştirmek üzere optimize edilmiş çok sayıda işlemci içerir. Ancak Android yalnızca tek bir işlemcide çalışır: uygulama işlemcisi (AP). AP, oyun gibi ekran kullanım durumları için mükemmel performans sağlayacak şekilde ayarlanmıştır, ancak ekran kapalıyken bile her zaman sık ve kısa süreli işlem gerektiren özellikleri desteklemek için çok fazla güce ihtiyaç duyar. Daha küçük işlemciler bu iş yüklerini daha verimli bir şekilde işleyebilir ve pil ömrünü fark edilir derecede etkilemeden görevlerini 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), basit, standartlaştırılmış, yerleşik dostu 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 onların güvenilir iş ortaklarının AP'den işlem yükünü boşaltmasını, pilden tasarruf etmesini ve kullanıcı deneyiminin çeşitli alanlarını iyileştirmesini kolaylaştırır ve özellikle makine uygulamasını içerenler olmak üzere her zaman açık, bağlamsal olarak bilinçli özellikler sınıfını etkinleştirir. Ortam algılamayı öğrenme.

Anahtar kavramlar

CHRE, nanoapps adı verilen küçük yerel uygulamaların düşük güçlü bir işlemcide çalıştırıldığı ve ortak CHRE API aracılığıyla temel sistemle etkileşime girdiği yazılım ortamıdır. CHRE API'lerinin doğru şekilde uygulanmasını hızlandırmak için, CHRE'nin platformlar arası referans uygulaması AOSP'ye dahil edilmiştir. Referans uygulaması, bir dizi platform soyutlama katmanı (PAL'ler) 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 ve sınırlı erişimli ContextHubManager sistem API'leri aracılığıyla CHRE ve nano uygulamalarla etkileşime giren bir veya daha fazla istemci uygulamasına bağlıdır.

CHRE mimarisi ile bir bütün olarak Android arasında yüksek düzeyde paralellikler kurulabilir. Ancak birkaç önemli ayrım vardır:

  • CHRE yalnızca yerel kodda (C veya C++) geliştirilen nanouygulamaların çalıştırılmasını destekler; Java desteklenmiyor.
  • Kaynak kısıtlamaları ve güvenlik sınırlamaları nedeniyle CHRE, isteğe bağlı üçüncü taraf Android uygulamalarının kullanımına açık değildir. Yalnızca sistemin güvendiği uygulamalar buna erişebilir.

CHRE kavramı ile sensör merkezi arasında yapılması gereken önemli bir ayrım da vardır. Sensör hub'ını 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 işlevselliğini sağlamaz. CHRE, Bağlam Merkezi 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

Bağlam Merkezi HAL

Context Hub donanım soyutlama katmanı (HAL) hardware/interfaces/contexthub adresinde tanımlanan, Android çerçevesi ile cihazın CHRE uygulaması arasındaki arayüzdür. Bağlam Merkezi HAL, Android çerçevesinin mevcut bağlam hub'larını ve bunların nano uygulamalarını keşfettiği, mesaj aktarımı yoluyla bu nano uygulamalarla etkileşime girdiği ve nano uygulamaların yüklenmesine ve kaldırılmasına izin verdiği API'leri tanımlar. CHRE'nin referans uygulamasıyla çalışan Bağlam Merkezi HAL'nin referans uygulaması system/chre/host adresinde mevcuttur.

Bu belge ile HAL tanımı arasında çelişki olması durumunda HAL tanımı önceliklidir.

Başlatma

Android başlatıldığında ContextHubService , cihazda herhangi bir bağlam hub'ının mevcut olup olmadığını belirlemek için getHubs() HAL işlevini çağırır. Bu, tek seferlik, engelleyici bir çağrıdır, dolayısıyla önyüklemenin gecikmesini önlemek için hızlı bir şekilde tamamlanması gerekir ve daha sonra yeni bağlam hub'ları tanıtılamayacağından doğru bir sonuç döndürmesi gerekir.

Nanoapp'ları yükleme ve boşaltma

Bir bağlam merkezi, cihaz görüntüsüne dahil edilen ve CHRE başlatıldığında yüklenen bir dizi nanouygulamayı içerebilir. Bunlar önceden yüklenmiş nanoapp'ler olarak bilinir ve queryApps() 'a verilen ilk olası yanıta dahil edilmelidir.

Bağlam Merkezi HAL ayrıca loadNanoApp() ve unloadNanoApp() işlevleri aracılığıyla nanouygulamaların çalışma zamanında dinamik olarak yüklenmesini ve kaldırılmasını da destekler. Nanoapp'ler, HAL'e cihazın CHRE donanım ve yazılım uygulamasına özel ikili formatta sağlanır.

Bir nanouygulamanın yüklenmesine yönelik uygulama, bunun CHRE'yi çalıştıran işlemciye bağlı flash depolama gibi kalıcı belleğe yazılmasını içeriyorsa, CHRE uygulamasının her zaman bu dinamik nanouygulamalar devre dışı durumdayken başlatılması gerekir. Bu, HAL aracılığıyla bir enableNanoapp() isteği alınana kadar nanoapp kodlarından hiçbirinin yürütülmeyeceği anlamına gelir. Önceden yüklenmiş nanoapps etkin durumda başlatılabilir.

Bağlam merkezi yeniden başlatılıyor

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 gerekli olabilir. Bu durumlarda CHRE, Android'den bağımsız olarak yeniden başlatılır. HAL bunu Android'e RESTARTED olayı aracılığıyla bildirir; bunu yalnızca CHRE, queryApps() gibi yeni istekleri kabul edebilecek noktaya kadar yeniden başlatıldıktan sonra göndermesi gerekir.

CHRE sistemine genel bakış

CHRE, birincil hesaplama biriminin bir nanoapp'ın olay işleme giriş noktasına iletilen bir olay olduğu olay odaklı bir mimari etrafında tasarlanmıştır. CHRE çerçevesi çok iş parçacıklı olabilse de, belirli bir nano uygulama hiçbir zaman birden fazla iş parçacığından paralel olarak yürütülmez. CHRE çerçevesi, belirli bir nanoapp ile üç nanoapp giriş noktasından biri aracılığıyla ( nanoappStart() , nanoappHandleEvent() ve nanoappEnd() ) veya önceki bir CHRE API çağrısında sağlanan bir geri arama aracılığıyla etkileşime girer ve nanoapps, CHRE çerçevesiyle etkileşime girer ve CHRE API aracılığıyla temel sistem. CHRE API, sensörler, GNSS, Wi-Fi, WWAN ve ses de dahil olmak üzere bağlamsal sinyallere erişim olanaklarının yanı sıra bir dizi temel işlevsellik sağlar ve satıcıya özel nano uygulamalar tarafından kullanılmak üzere satıcıya özgü ek yeteneklerle genişletilebilir. .

Sistem oluştur

Bağlam Merkezi HAL ve diğer gerekli AP tarafı bileşenleri Android ile birlikte oluşturulmuş olsa da, CHRE içinde çalışan kodun, özel bir araç zincirine duyulan ihtiyaç gibi kendisini Android derleme sistemiyle uyumsuz hale getiren gereksinimleri olabilir. Bu nedenle, AOSP'deki CHRE projesi, nano uygulamaları derlemek için GNU Make'e dayalı basitleştirilmiş bir yapı sistemi ve isteğe bağlı olarak CHRE çerçevesini sistemle entegre edilebilecek kitaplıklar halinde sağlar. CHRE desteği ekleyen cihaz üreticileri, hedef cihazları için yapı sistemi desteğini AOSP'ye entegre etmelidir.

CHRE API, C99 dil standardına göre yazılmıştır ve referans uygulaması, kaynak sınırlı uygulamalara uygun, sınırlı bir C++11 alt kümesini kullanır.

CHRE API'si

CHRE API, bir nanoapp ile sistem arasındaki yazılım arayüzünü tanımlayan bir C başlık dosyası koleksiyonudur. Nanoapps kodunu CHRE'yi destekleyen tüm cihazlarla uyumlu hale getirmek için tasarlanmıştır; bu, bir nanoapp'ın kaynak kodunun yeni bir cihaz türünü desteklemek için değiştirilmesine gerek olmadığı, ancak hedef cihazın işlemcisi için özel olarak yeniden derlenmesi gerekebileceği anlamına gelir komut seti veya uygulama ikili arayüzü (ABI). CHRE mimarisi ve API tasarımı ayrıca nanouygulamaların CHRE API'nin farklı sürümleri arasında ikili uyumlu olmasını sağlar; bu, bir nanoapp'ın, CHRE API'nin farklı bir sürümünü uygulayan bir sistemde çalıştırmak için yeniden derlenmesine gerek olmadığı anlamına gelir. nanoapp'ın derlendiği hedef API. Başka bir deyişle, bir nanoapp ikili programı CHRE API v1.3'ü destekleyen bir cihazda çalışıyorsa ve bu cihaz CHRE API v1.4'ü destekleyecek şekilde yükseltilirse, aynı nanoapp ikili programı çalışmaya devam eder. Benzer şekilde nano uygulama, CHRE API v1.2 üzerinde çalışabilir ve çalışma zamanında, işlevselliğini elde etmek için API v1.3'ten işlevsellik gerektirip gerektirmediğini veya potansiyel olarak zarif özellik bozulmasıyla çalışıp çalışmadığını belirleyebilir.

CHRE API'nin yeni sürümleri Android ile birlikte yayınlanır, ancak CHRE uygulaması satıcı uygulamasının bir parçası olduğundan, bir cihazda desteklenen CHRE API sürümünün mutlaka bir Android sürümüne bağlı olması gerekmez.

Sürüm özeti

Android HIDL sürüm oluşturma şeması gibi CHRE API de anlamsal sürüm oluşturmayı takip eder. Ana sürüm ikili uyumluluğu belirtirken, ikincil sürüm geriye dönük uyumlu özellikler eklendiğinde artırılır. CHRE API, hangi sürümün bir işlevi veya parametreyi sunduğunu belirlemek için kaynak kodu açıklamalarını içerir; örneğin @since v1.1 .

CHRE uygulaması ayrıca chreGetVersion() aracılığıyla platforma özgü bir yama sürümünü de ortaya çıkarır; bu, uygulamada hata düzeltmelerinin veya küçük güncellemelerin ne zaman yapıldığını gösterir.

Sürüm 1.0 (Android 7)

Sensörlere yönelik desteğin yanı sıra olaylar ve zamanlayıcılar gibi temel nano uygulama işlevlerini içerir.

Sürüm 1.1 (Android 8)

GNSS konum ve ham ölçümler, Wi-Fi tarama ve hücresel ağ bilgileri yoluyla konum yeteneklerinin yanı sıra nanouygulamadan nanouygulamaya iletişimin etkinleştirilmesine yönelik genel iyileştirmeler ve diğer iyileştirmeleri sunar.

Sürüm 1.2 (Android 9)

Düşük güçlü bir mikrofondan gelen veriler için destek, Wi-Fi RTT aralığı, AP uyandırma/uyku bildirimleri ve diğer iyileştirmeler eklenir.

Sürüm 1.3 (Android 10)

Sensör kalibrasyon verileriyle ilgili yetenekleri geliştirir, toplu sensör verilerinin isteğe bağlı olarak temizlenmesi için destek ekler, adım algılamalı sensör tipini tanımlar ve GNSS konum olaylarını ek doğruluk alanlarıyla genişletir.

Sürüm 1.4 (Android 11)

5G hücre bilgileri, nanoapp hata ayıklama dökümü ve diğer iyileştirmeler için destek ekler.

Zorunlu sistem özellikleri

Sensörler gibi bağlamsal sinyal kaynakları isteğe bağlı özellik alanlarına kategorize edilirken, tüm CHRE uygulamalarında birkaç temel işlev gereklidir. Buna, zamanlayıcıları ayarlamak, uygulama işlemcisindeki istemcilere mesaj göndermek ve almak, günlüğe kaydetmek ve diğerleri gibi temel sistem API'leri dahildir. Tüm ayrıntılar için API başlıklarına bakın.

CHRE API'sinde kodlanan temel sistem özelliklerine ek olarak, Bağlam Merkezi HAL düzeyinde belirtilen zorunlu CHRE sistem düzeyi özellikleri de vardır. Bunlardan en önemlisi nano uygulamaları dinamik olarak yükleme ve kaldırma yeteneğidir.

C/C++ standart kütüphanesi

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 yalnızca bir alt kümesini ve çalışma zamanı desteği gerektiren dil özelliklerini desteklemesi gerekir. Bu ilkelere uygun olarak, bazı özellikler bellekleri ve/veya kapsamlı işletim sistemi düzeyindeki bağımlılıkları nedeniyle açıkça hariç tutulmuştur ve diğerleri bunların yerine daha uygun CHRE'ye özgü API'ler konulmuştur. Her ne kadar kapsamlı bir liste olmasa da, aşağıdaki yeteneklerin nanoapp'lerin kullanımına sunulması amaçlanmamıştır:

  • C++ istisnaları ve çalışma zamanı türü bilgileri (RTTI)
  • C++ 11 başlıkları dahil olmak üzere standart kitaplık ç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 doğası gereği dinamik ayırmayı kullanan std::unique_ptr gibi 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şlevler
  • system , getenv dahil olmak üzere ana bilgisayar ortamına erişim
  • POSIX ve C99 veya C++11 dil standartlarına dahil olmayan diğer kütüphaneler

Çoğu durumda, eşdeğer işlevsellik CHRE API işlevlerinden ve/veya yardımcı program kitaplıklarından edinilebilir. Örneğin, chreLog Android logcat sistemini hedefleyen hata ayıklama günlüğü için kullanılabilir; burada daha geleneksel bir program, printf veya std::cout kullanabilir.

Bunun tersine, bazı standart kütüphane işlevleri gereklidir. Bunları bir nanoapp ikili dosyasına dahil edilmek üzere statik kütüphaneler aracılığıyla veya nanoapp ile sistem arasındaki dinamik bağlantı yoluyla ortaya çıkarmak platform uygulamasına bağlıdır. Buna aşağıdakiler dahildir ancak bunlarla sınırlı değildir:

  • Dize/dizi yardımcı programları: memcmp , memcpy , memmove , memset , strlen
  • Matematik kütüphanesi: Yaygın olarak kullanılan tek duyarlıklı kayan nokta fonksiyonları:

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

Bazı temel platformlar ek işlevleri desteklese de, harici bağımlılıklarını CHRE API işlevlerine ve onaylanmış standart kitaplık işlevlerine sınırlamadığı sürece bir nanoapp, CHRE uygulamaları arasında taşınabilir olarak kabul edilmez.

Opsiyonel özellikler

Donanım ve yazılımı tanıtmak için CHRE API, API perspektifinden isteğe bağlı olarak kabul edilen özellik alanlarına bölünmüştür. Bu özelliklerin uyumlu bir CHRE uygulamasını desteklemesi gerekmese de, belirli bir nano uygulamayı desteklemeleri gerekebilir. Bir platform belirli bir API kümesini desteklemese bile, bu işlevlere başvuran nanouygulamaların oluşturulabilmesi ve yüklenebilmesi gerekir.

Sensörler

CHRE API, ivmeölçer, jiroskop, manyetometre, ortam ışığı sensörü ve yakınlık dahil olmak üzere sensörlerden veri talep etme olanağı sağlar. Bu API'lerin, güç tüketimini azaltmak için sensör örneklerinin gruplandırılması desteği de dahil olmak üzere, Android Sensors API'lerine benzer bir özellik seti sağlaması amaçlanmaktadır. Sensör verilerinin CHRE içinde işlenmesi, AP'de çalışmaya kıyasla hareket sinyallerinin ç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, periyodik konum düzeltme taleplerinin yanı sıra ham ölçüm verilerini de içerir; ancak her ikisi de bağımsız yeteneklerdir. CHRE'nin GNSS alt sistemine doğrudan bağlantısı olduğundan, AP tabanlı GNSS istekleriyle karşılaştırıldığında güç azalır çünkü AP, bir konum oturumunun tüm yaşam döngüsü boyunca uykuda kalabilir.

Wifi

CHRE, öncelikle konum amacıyla Wi-Fi çipiyle etkileşim kurma olanağı sağlar. GNSS dış mekanlarda iyi çalışırken, Wi-Fi taramalarının sonuçları iç mekanlarda ve gelişmiş alanlarda doğru konum bilgisi sağlayabilir. CHRE, AP'yi tarama için uyandırma maliyetinden kaçınmanın yanı sıra, bağlantı amacıyla Wi-Fi ürün 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ğlamsal amaçlar için bağlantı taramalarından yararlanmak, gerçekleştirilen Wi-Fi taramalarının toplam sayısının azaltılmasına yardımcı olarak güç tasarrufu sağlar.

CHRE API v1.1'e, tarama sonuçlarını izleme ve isteğe bağlı olarak taramaları tetikleme yeteneği de dahil olmak üzere Wi-Fi desteği eklendi. Bu yetenekler v1.2'de, özelliği destekleyen erişim noktalarına karşı Gidiş-Dönüş Süresi (RTT) ölçümleri gerçekleştirme yeteneği ile genişletildi ve bu da doğru göreceli konum belirlemeye olanak tanıyor.

WWAN

CHRE API, genellikle kaba taneli konum amaçları için kullanılan, hizmet veren hücre ve komşuları için hücre tanımlama bilgilerini alma yeteneği sağlar.

Ses

CHRE, genellikle SoundTrigger HAL'ı uygulamak için kullanılan donanımdan yararlanan düşük güçlü bir mikrofondan gelen toplu ses verilerini işleyebilir. Ses verilerinin CHRE'de işlenmesi, bunun hareket sensörleri gibi diğer verilerle birleştirilmesini sağlayabilir.

Referans uygulaması

CHRE çerçevesi için referans kodu, C++11'de uygulanan system/chre projesinde AOSP'ye dahil edilmiştir. Kesinlikle zorunlu olmasa da, tutarlılığın sağlanmasına ve yeni yeteneklerin benimsenmesini hızlandırmaya yardımcı olmak 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ı olması ve uyumluluk için bir temel ve standart görevi görmesi açısından çekirdek Android çerçevesine bir analog olarak görülebilir. Satıcıya özel yeteneklerle özelleştirilip genişletilebilse de, ortak kodun referansa mümkün olduğunca yakın tutulması tavsiye edilir. Android'in HAL'lerine benzer şekilde CHRE referans uygulaması, minimum gereksinimleri karşılayan herhangi bir cihaza uyarlanabilmesini sağlamak için çeşitli platform soyutlamalarını kullanır.

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