ODM bölümleri

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.

Bölümler arasında ABI'yi koruma

Şekil 1. Bölümler arasında ABI'yi koruma

  • odm ile vendor bölümleri arasında ABI kararlılığı yoktur. Her iki bölüm de aynı anda yükseltilmelidir.
  • odm ve vendor bölümleri birbirine bağlı olabilir ancak vendor bölümü odm bölümü olmadan çalışmalıdır.
  • odm ile system arasındaki ABI, vendor ile system arası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_PARTITIONS ve BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
  • ODM resmi için kullanılan BOARD_ODMIMAGE_FILE_SYSTEM_TYPE dosya 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.prop için PRODUCT_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: true Android.bp içinde başlıyor
  • LOCAL_ODM_MODULE := true Android.mk iç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.