Partisi ODM

Android 10 menyertakan dukungan untuk membuat partisi odm menggunakan sistem build Android.

Tentang partisi ODM

Produsen desain asli (ODM) menyesuaikan paket dukungan papan vendor (BSP) system-on-chip (SoC) ke perangkat spesifik mereka (papan mereka). Hal ini memungkinkan mereka untuk mengimplementasikan modul kernel untuk komponen khusus board, daemon khusus board, atau fitur mereka sendiri pada lapisan abstraksi perangkat keras (HAL). Mereka mungkin juga ingin mengganti atau menyesuaikan komponen SoC.

Pada rilis Android yang lebih rendah, penyesuaian seperti itu mencegah penggunaan satu image vendor untuk perangkat dengan SoC yang sama (atau dengan SoC berbeda, namun dalam keluarga yang sama). Di Android 10 dan lebih tinggi, Anda dapat menggunakan partisi odm terpisah untuk penyesuaian, yang memungkinkan Anda menggunakan satu gambar vendor untuk beberapa SKU perangkat keras.

Menggunakan partisi produk dan ODM

Android 9 menambahkan dukungan untuk membuat partisi product , memungkinkan penggunaan satu image sistem untuk beberapa SKU perangkat lunak yang disediakan oleh image product.img berbeda. Meskipun partisi product ditujukan untuk SKU perangkat lunak, partisi odm ditujukan untuk SKU perangkat keras.

Dengan partisi produk dan ODM khusus, Anda dapat menggunakan partisi system untuk menghosting kode generik untuk berbagi di antara banyak SKU perangkat lunak, dan partisi vendor untuk menghosting kode BSP khusus SoC untuk berbagi di antara beberapa perangkat berdasarkan SoC yang diberikan.

Menggunakan partisi terpisah memiliki kelemahan, seperti kesulitan dalam mengelola ruang disk (misalnya, Anda harus mencadangkan ruang dalam jumlah terbatas untuk pertumbuhan di masa mendatang). Namun, dukungan Android 10 untuk partisi dinamis menghilangkan masalah disk, dan memungkinkan partisi ulang perangkat selama pembaruan over-the-air (OTA) .

komponen ODM

Partisi odm berisi komponen khusus ODM berikut (mirip dengan partisi vendor ), yang tercantum dalam tabel berikut.

Komponen khusus ODM Lokasi
Modul kernel yang dapat dimuat (LKM) /odm/lib/modules/*.ko
Perpustakaan asli /odm/lib[64]
HAL /odm/lib[64]/hw
Kebijakan SE /odm/etc/selinux
Data objek VINTF /odm/etc/vintf
file init.rc /odm/etc/init
Properti sistem /odm/build.prop
Hamparan sumber daya runtime (RRO) /odm/overlay/*.apk
Aplikasi /odm/app/*.apk
Aplikasi Priv /odm/priv-app/*.apk
perpustakaan Jawa /odm/framework/*.jar
Konfigurasi sistem Kerangka Android /odm/etc/sysconfig/* dan /odm/etc/permissions/*

Tidak ada gambar khusus

Jangan gunakan gambar khusus karena tidak mendukung hal berikut:

  • Pemasangan modul ke target tertentu. Gambar khusus mendukung penyalinan artefak ke dalam gambar, tetapi tidak dapat memasang modul ke partisi tertentu dengan menentukan partisi target sebagai bagian dari aturan pembangunan.
  • Segera. custom_images tidak dapat dibuat menggunakan sistem build Soong.
  • pembaruan OTA. Gambar khusus digunakan sebagai gambar ROM pabrik yang tidak dapat di-OTA.

Mempertahankan ABI antar partisi

Partisi odm merupakan perpanjangan dari partisi vendor . Saat mempertimbangkan stabilitas antarmuka biner aplikasi (ABI), ingatlah arsitektur berikut.

Mempertahankan ABI antar partisi
Gambar 1. Mempertahankan ABI antar partisi
  • Tidak ada stabilitas ABI antara partisi odm dan vendor . Kedua partisi harus diupgrade secara bersamaan.
  • Partisi odm dan vendor dapat bergantung satu sama lain, namun partisi vendor harus berfungsi tanpa partisi odm .
  • ABI antara odm dan system sama dengan ABI antara vendor dan system .

Interaksi langsung antara partisi product dan vendor atau partisi odm tidak diperbolehkan . (Ini diberlakukan oleh SEpolicy.)

Menerapkan partisi ODM

Sebelum mengimplementasikan partisi baru, tinjau perubahan AOSP terkait .

Menyiapkan partisi ODM

Untuk mengatur partisi odm , sertakan flag build berikut:

  • BOARD_ODMIMAGE_PARTITION_SIZE untuk ukuran partisi tetap
  • PRODUCT_USE_DYNAMIC_PARTITIONS dan BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE untuk ukuran partisi dinamis
  • Jenis sistem file BOARD_ODMIMAGE_FILE_SYSTEM_TYPE yang digunakan untuk gambar ODM
  • PRODUCT_ODM_PROPERTIES untuk /odm/build.prop untuk digunakan dalam $(call inherit-product path/to/device.mk) , seperti pada PRODUCT_ODM_PROPERTIES += product.abc=ok

Menginstal modul ke partisi ODM

Gunakan flag build ini untuk menginstal modul ke partisi odm :

  • device_specific: true di Android.bp
  • LOCAL_ODM_MODULE := true di Android.mk

Mengaktifkan Boot Terverifikasi

Untuk mencegah perangkat lunak berbahaya merusak partisi odm , aktifkan Android Verified Boot (AVB) untuk partisi tersebut (seperti yang Anda lakukan untuk partisi vendor dan system ).

Untuk mengaktifkan AVB, sertakan flag build BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS . Untuk detail tentang konfigurasi AVB pada partisi dinamis, lihat Perubahan konfigurasi AVB .

Memperlakukan /odm sebagai partisi /vendor lain

Untuk memastikan bahwa sistem menangani partisi odm sebagai partisi vendor , gantilah referensi vendor yang di-hardcode dengan sekumpulan partisi berorientasi perangkat keras (saat ini odm dan vendor ). Lokasi referensi vendor terkemuka di platform ini mencakup tautan dinamis , manajer paket , dan shell/libc .