Android 10'da ConfigStore HAL, yapı işaretlerini kullanarak yapılandırma değerlerini vendor
bölümünde depolar ve system
bölümündeki bir hizmet, HIDL'yi kullanarak bu değerlere erişir (bu durum Android 9 için de geçerlidir). Ancak yüksek bellek tüketimi ve zor kullanım nedeniyle ConfigStore HAL'in desteği sonlandırıldı.
ConfigStore HAL, eski satıcı bölümlerini desteklemek için AOSP'de kalır. Android 10 veya sonraki sürümleri çalıştıran cihazlarda surfaceflinger
önce sistem özelliklerini okur; "SurfaceFlingerProperties.sysprop" içinde bir yapılandırma öğesi için sistem özelliği tanımlanmamışsa "surfaceflinger" ConfigStore HAL'e geri döner.
Android 8.0, monolitik Android OS'i genel (system.img
) ve donanıma özel (vendor.img
ve odm.img
) bölümlere ayırır. Bu değişiklik sonucunda, koşullu derleme sistem bölümüne yüklenen modüllerden kaldırılmalı ve bu modüller çalışma zamanında sistemin yapılandırmasını belirlemelidir (ve bu yapılandırmaya bağlı olarak farklı davranmalıdır).
ConfigStore HAL, Android çerçevesini yapılandırmak için kullanılan salt okunur yapılandırma öğelerine erişmek üzere bir dizi API sağlar. Bu sayfada ConfigStore HAL'in tasarımı (ve bu amaç için sistem özelliklerinin neden kullanılmadığı) açıklanmaktadır. Bu bölümdeki diğer sayfalarda ise HAL arayüzü, hizmet uygulaması ve istemci tarafı kullanımı ayrıntılı olarak açıklanmaktadır. Bu sayfalarda surfaceflinger
her zaman örnek olarak kullanılmaktadır. ConfigStore arayüz sınıflarıyla ilgili yardım için Arayüz Sınıfları ve Öğeleri Ekleme başlıklı makaleyi inceleyin.
Sistem özelliklerini neden kullanmalısınız?
Sistem özelliklerini kullanmayı düşündük ancak aşağıdakiler dahil olmak üzere çeşitli temel sorunlar tespit ettik:
- Değerlerin uzunluğuyla ilgili sınırlamalar Sistem özelliklerinin değerlerinin uzunluğuyla ilgili sıkı sınırlamalar vardır (92 bayt). Ayrıca bu sınırlar, Android uygulamalarına doğrudan C makrosu olarak sunulduğundan uzunluğun artırılması geriye dönük uyumluluk sorunlarına neden olabilir.
- Tür desteği yok. Tüm değerler temelde dizedir ve API'ler yalnızca dizeyi
int
veyabool
olarak ayrıştırır. Diğer bileşik veri türleri (ör. dizi ve yapı) istemciler tarafından kodlanmalı/kodları çözülmelidir (ör."aaa,bbb,ccc"
üç dizenin dizisi olarak kodlanabilir). - Üzerine yazma. Salt okunur sistem özellikleri bir kez yazılabilir mülkler olarak uygulandığından, AOSP tarafından tanımlanan salt okunur değerleri geçersiz kılmak isteyen tedarikçilerin/ODM'lerin AOSP tarafından tanımlanan salt okunur değerlerden önce kendi salt okunur değerlerini içe aktarması gerekir. Bu da tedarikçi firma tarafından tanımlanan yeniden yazılabilir değerlerin AOSP tarafından tanımlanan değerlerle geçersiz kılınmasına neden olur.
- Alan gereksinimleri Sistem özellikleri, her işlemde nispeten büyük miktarda adres alanı kaplar. Sistem özellikleri, sabit boyutu 128 KB olan
prop_area
birimleri halinde gruplandırılır. Bu birimlerin tümü, içinde yalnızca tek bir sistem özelliğine erişiliyor olsa bile bir işlem adres alanına ayrılır. Bu durum, adres alanının değerli olduğu 32 bitlik cihazlarda sorunlara yol açabilir.
Uyumluluktan ödün vermeden bu sınırlamaların üstesinden gelmeye çalıştık ancak sistem özelliklerinin salt okunur yapılandırma öğelerine erişimi desteklemek için tasarlanmadığı konusunda endişelenmeye devam ettik. Sonunda, dinamik olarak güncellenen birkaç öğeyi Android'in tamamında gerçek zamanlı olarak paylaşmak için sistem özelliklerinin daha uygun olduğuna ve salt okunur yapılandırma öğelerine erişmeye özel yeni bir sisteme ihtiyaç olduğuna karar verdik.
ConfigStore HAL tasarımı
Temel tasarım basittir:
Şekil 1. ConfigStore HAL tasarımı
- HIDL'de derleme işaretlerini (şu anda çerçeveyi koşullu olarak derlemek için kullanılır) tanımlayın.
- Tedarikçiler ve OEM'ler, HAL hizmetini uygulayarak derleme işaretleri için SoC ve cihaza özgü değerler sağlar.
- Çalışma zamanında bir yapılandırma öğesinin değerini bulmak için HAL hizmetini kullanacak şekilde çerçeveyi değiştirin.
Şu anda çerçeve tarafından referans verilen yapılandırma öğeleri, sürüm numaralı bir HIDL paketine (android.hardware.configstore@1.0
) dahil edilir. Tedarikçi firmalar/OEM'ler bu pakette arayüzleri uygulayarak yapılandırma öğelerine değer sağlar ve çerçeve, bir yapılandırma öğesi için değer aldığında bu arayüzleri kullanır.
Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler
Aynı arayüzde tanımlanan derleme işaretleri aynı SELinux politikasından etkilenir. Bir veya daha fazla derleme işaretinin farklı SELinux politikaları olması gerekiyorsa bunlar başka bir arayüze ayrılmalıdır. Ayrı arayüzler artık geriye dönük uyumlu olmadığından bu işlem için android.hardware.configstore package
'te büyük bir düzeltme gerekebilir.