ODM Bölümleri

Android 10, Android derleme sistemini kullanarak odm bölümleri oluşturmaya yönelik destek içerir.

ODM bölümleri hakkında

Orijinal tasarım üreticileri (ODM'ler), çip üzerinde sistem (SoC) satıcı anakart destek paketlerini (BSP'ler) kendi cihazlarına (anakartlarına) göre özelleştirir. Bu, karta özgü bileşenler, karta özgü arka plan programları veya donanım soyutlama katmanları (HAL'ler) üzerindeki kendi özellikleri için çekirdek modüllerini uygulamalarını sağlar. Ayrıca SoC bileşenlerini değiştirmek veya özelleştirmek isteyebilirler.

Daha düşük Android sürümlerinde, bu tür özelleştirmeler, aynı SoC'ye (veya farklı SoC'lere sahip ancak aynı aileden) sahip cihazlar için tek bir satıcı görüntüsünün kullanılmasını engelliyordu. Android 10 ve üzeri sürümlerde, özelleştirmeler için ayrı bir odm bölümü kullanabilirsiniz; bu, birden çok donanım SKU'su için tek bir satıcı görüntüsünü kullanmanıza olanak tanır.

Ürün ve ODM bölümlerini kullanma

Android 9, farklı product.img görüntüleri tarafından sağlanan birden fazla yazılım SKU'su için tek bir sistem görüntüsünün kullanılmasına olanak tanıyan product bölümleri oluşturmaya yönelik destek ekledi. product bölümü yazılım SKU'larına yönelikken, odm bölümü donanım SKU'larına yöneliktir.

Özel ürün ve ODM bölümleriyle, birçok yazılım SKU'su arasında paylaşıma yönelik genel kodu barındırmak için system bölümünü ve verilen SoC'ye dayalı olarak birden fazla cihaz arasında paylaşmak üzere SoC'ye özgü BSP kodunu barındırmak için vendor bölümünü kullanabilirsiniz.

Ayrı bölümleri kullanmanın, disk alanını yönetme zorluğu gibi dezavantajları vardır (örneğin, gelecekteki büyüme için sınırlı miktarda alan ayırmanız gerekir). Ancak dinamik bölümlere yönelik Android 10 desteği, disk sorununu ortadan kaldırır ve kablosuz (OTA) güncelleme sırasında bir 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 özgü aşağıdaki 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 kütüphaneler /odm/lib[64]
HAL'ler /odm/lib[64]/hw
SE Politikası /odm/etc/selinux
VINTF nesne verileri /odm/etc/vintf
init.rc dosyaları /odm/etc/init
Sistem özellikleri /odm/build.prop
Çalışma zamanı kaynak katmanları (RRO'lar) /odm/overlay/*.apk
Uygulamalar /odm/app/*.apk
Özel uygulamalar /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 destekleri bulunmadığından özel görseller kullanmayın:

  • Bir modülün belirli bir hedefe kurulması. Özel görüntüler, yapıtların bir görüntüye kopyalanmasını destekler, ancak hedef bölümü bir derleme kuralının parçası olarak belirterek belirli bir bölüme modül yükleyemez.
  • Soong. custom_images Soong derleme sistemi kullanılarak oluşturulamaz.
  • OTA güncellemesi. Özel görüntüler, OTA düzenlenemeyen fabrika ROM görüntüleri 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 aklınızda bulundurun.

Bölümler arasında ABI'yi koruma
Şekil 1. Bölümler arasında ABI'nin korunması
  • odm ve vendor bölümleri arasında ABI kararlılığı yoktur. Her iki bölümün de aynı anda yükseltilmesi gerekir.
  • odm ve vendor bölümleri birbirine bağlı olabilir ancak vendor bölümünün bir odm bölümü olmadan çalışması gerekir .
  • 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 uygulanır.)

ODM bölümlerini uygulama

Yeni bir bölüm uygulamadan önce ilgili AOSP değişikliklerini gözden geçirin.

ODM bölümlerini ayarlama

odm bölümlerini ayarlamak için şu derleme bayraklarını 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 görüntüsü için kullanılan BOARD_ODMIMAGE_FILE_SYSTEM_TYPE dosya sistemi türü
  • $(call inherit-product path/to/device.mk) içinde kullanım için /odm/build.prop için PRODUCT_ODM_PROPERTIES , PRODUCT_ODM_PROPERTIES += product.abc=ok olduğu gibi

Bir ODM bölümüne modül yükleme

Bir odm bölümüne modül yüklemek için bu derleme bayraklarını kullanın:

  • device_specific: true Android.bp doğru
  • LOCAL_ODM_MODULE := true Android.mk doğru

Doğrulanmış Önyüklemeyi Etkinleştirme

Kötü amaçlı yazılımların odm bölümlerine müdahale etmesini önlemek amacıyla, bu bölümler için Android Verified Boot'u (AVB) etkinleştirin (tıpkı vendor ve system bölümlerinde yaptığınız gibi).

AVB'yi etkinleştirmek için BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS yapı bayrağını ekleyin. AVB'yi dinamik bölümlerde yapılandırmaya ilişkin ayrıntılar için bkz. AVB yapılandırma değişiklikleri .

/odm'yi başka bir /vendor bölümü gibi ele almak

Sistemin odm bölümünü bir vendor bölümü olarak işlemesini sağlamak için, sabit kodlu vendor referanslarını bir dizi donanım odaklı bölümle (şu anda odm ve vendor ) değiştirin. Platformdaki dikkate değer vendor referans konumları arasında dinamik bağlayıcı , paket yöneticisi ve shell/libc yer alır.