Android 10'da ConfigStore HAL, yapılandırma değerlerini vendor
bölümünde depolamak için derleme işaretlerini kullanır 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'yi genel (system.img
) ve donanıma özgü (vendor.img
ve
odm.img
) bölümlere ayırır. Bu değişikliğin sonucunda, koşullu derlemenin sistem bölümüne yüklü modüllerden kaldırılması ve bu tür 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 makroları olarak maruz kaldığından, uzunluğun uzatı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 bir adres alanı kullanır. 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 neden olabilir.
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ç duyulduğ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çi firmalar 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.
Çerçeve tarafından referans verilen yapılandırma öğeleri, sürümü oluşturulmuş bir HIDL paketine (android.hardware.configstore@1.0
) dahil edilmiştir.
Tedarikçiler ve OEM'ler bu pakette arayüzler uygulayarak yapılandırma öğelerine değer sağlar. Çerçeve, bir yapılandırma öğesi için değer alması gerektiğinde 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ıştırılmış 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.