Android 10, Android derleme sistemini kullanarak odm bölüm oluşturma desteği içerir.
ODM bölümleri hakkında
Orijinal tasarım üreticileri (ODM'ler), çip üzerinde sistem (SoC) tedarikçisi kart destek paketlerini (BSP'ler) kendi cihazlarına (kartlarına) göre özelleştirir. Bu sayede, kartlara özgü bileşenler, kartlara özgü daemon'lar veya donanım soyutlama katmanlarında (HAL'ler) kendi özelliklerini uygulayabilirler. Ayrıca SoC bileşenlerini değiştirmek veya özelleştirmek isteyebilirler.
Android'in eski sürümlerinde bu tür özelleştirmeler, aynı SoC'ye (veya aynı ailedeki farklı SoC'lere) sahip cihazlar için tek bir tedarikçi firma resminin kullanılmasını engelliyordu. Android 10 ve sonraki sürümlerde, özelleştirmeler için ayrı bir odm bölümü kullanabilirsiniz. Bu bölüm, birden fazla donanım SKU'su için tek bir tedarikçi görüntüsü kullanmanıza olanak tanır.
Ürün ve ODM bölümlerini kullanma
Android 9, product bölümlerinin oluşturulmasına yönelik destek ekleyerek farklı product.img resimleri tarafından sağlanan birden fazla yazılım SKU'su için tek bir sistem resminin kullanılmasını sağladı. product bölümü yazılım SKU'ları için, odm bölümü ise donanım SKU'ları için tasarlanmıştır.
Özel ürün ve ODM bölümleriyle, birçok yazılım SKU'su arasında paylaşılacak genel kodu barındırmak için system bölümünü ve belirli bir SoC'ye göre birden fazla cihaz arasında paylaşılacak SoC'ye özel BSP kodunu barındırmak için vendor bölümünü kullanabilirsiniz.
Ayrı bölümler kullanmanın dezavantajları vardır. Örneğin, disk alanını yönetmenin zor olması (örneğin, gelecekteki büyüme için sınırlı miktarda alan ayırmanız gerekir) bu dezavantajlardan biridir. Ancak Android 10'un dinamik bölümler desteği, disk sorununu ortadan kaldırır ve kablosuz (OTA) güncelleme sırasında cihazın yeniden bölümlendirilmesini mümkün kılar.
ODM bileşenleri
odm bölümü, aşağıdaki tabloda listelenen ODM'ye özel bileşenleri (vendor bölümüne benzer) içerir.
| ODM'ye özgü bileşen | Konum |
|---|---|
| Yüklenebilir çekirdek modülleri (LKM'ler) | /odm/lib/modules/*.ko |
| Yerel kitaplık | /odm/lib[64] |
| HAL'ler | /odm/lib[64]/hw |
| SEPolicy | /odm/etc/selinux |
| VINTF nesnesi verileri | /odm/etc/vintf |
init.rc
dosyaları |
/odm/etc/init |
| Sistem özellikleri | /odm/build.prop |
| Çalışma zamanında kaynak yer paylaşımları (RRO'lar) | /odm/overlay/*.apk |
| Uygulamalar | /odm/app/*.apk |
| Priv-apps | /odm/priv-app/*.apk |
| Java kitaplıkları | /odm/framework/*.jar |
| Android Framework sistem yapılandırmaları | /odm/etc/sysconfig/* ve /odm/etc/permissions/* |
Özel resim yok
Aşağıdakiler için destek olmadığından özel resimler kullanmayın:
- Belirli bir hedefe modül yükleme. Özel görüntüler, yapı öğelerinin bir görüntüye kopyalanmasını destekler ancak bir yapı kuralının parçası olarak hedef bölümü belirterek belirli bir bölüme modül yükleyemez.
- Soong.
custom_images, Soong derleme sistemi kullanılarak oluşturulamaz. - OTA güncellemesi. Özel resimler, OTA ile yüklenemeyen fabrika ROM resimleri olarak kullanılır.
Bölümler arasında ABI'leri koruma
odm bölümü, vendor bölümünün bir uzantısıdır. Uygulama ikili arayüzü (ABI) kararlılığını değerlendirirken aşağıdaki mimariyi göz önünde bulundurun.
Şekil 1. Bölümler arasında ABI'yi koruma
odmilevendorbölümleri arasında ABI kararlılığı yoktur. Her iki bölüm de aynı anda yükseltilmelidir.odmvevendorbölümleri birbirine bağlı olabilir ancakvendorbölümüodmbölümü olmadan çalışmalıdır.odmilesystemarasındaki ABI,vendorilesystemarasındaki ABI ile aynıdır.
product bölümü ile vendor veya odm bölümü arasında doğrudan etkileşime izin verilmez. (Bu, SEpolicy tarafından zorunlu kılınmıştır.)
ODM bölümlerini uygulama
Yeni bir bölüm uygulamadan önce ilgili AOSP değişikliklerini inceleyin.
ODM bölümlendirmelerini ayarlama
odm bölümleri oluşturmak için aşağıdaki derleme işaretlerini ekleyin:
- Sabit bölüm boyutu için
BOARD_ODMIMAGE_PARTITION_SIZE - Dinamik bölüm boyutu için
PRODUCT_USE_DYNAMIC_PARTITIONSveBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE - ODM resmi için kullanılan
BOARD_ODMIMAGE_FILE_SYSTEM_TYPEdosya sistemi türü PRODUCT_ODM_PROPERTIES += product.abc=ok'da olduğu gibi,$(call inherit-product path/to/device.mk)içinde kullanmak için/odm/build.propiçinPRODUCT_ODM_PROPERTIES
ODM bölümüne modül yükleme
Bir modülü odm bölümüne yüklemek için aşağıdaki derleme işaretlerini kullanın:
device_specific: trueAndroid.bpiçinde başlıyorLOCAL_ODM_MODULE := trueAndroid.mkiçinde başlıyor
Doğrulanmış Başlatma'yı etkinleştirme
Kötü amaçlı yazılımların odm bölümlerinde değişiklik yapmasını önlemek için bu bölümlerde Android Doğrulanmış Başlatma (AVB)'yı etkinleştirin (vendor ve system bölümleri için yaptığınız gibi).
AVB'yi etkinleştirmek için BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS derleme işaretini ekleyin. Dinamik bölümlerde AVB'yi yapılandırmayla ilgili ayrıntılar için AVB yapılandırma değişiklikleri başlıklı makaleyi inceleyin.
/odm'yi başka bir /vendor bölümü olarak ele alma
Sistemin odm bölümünü vendor bölümü olarak işlemesini sağlamak için sabit kodlanmış vendor referanslarını donanıma yönelik bir bölüm kümesiyle (şu anda odm ve vendor) değiştirin. Platformdaki önemli vendor referans konumları arasında dinamik bağlayıcı, paket yöneticisi ve shell/libc yer alır.