Partisi ODM

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

Tentang partisi ODM

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

Dalam rilis Android yang lebih rendah, penyesuaian tersebut mencegah penggunaan gambar vendor tunggal untuk perangkat dengan SoC yang sama (atau dengan SoC yang berbeda, tetapi dalam keluarga yang sama). Di Android 10 dan yang lebih tinggi, Anda dapat menggunakan partisi odm terpisah untuk penyesuaian, yang memungkinkan Anda menggunakan gambar vendor tunggal untuk beberapa SKU perangkat keras.

Menggunakan produk dan partisi ODM

Android 9 menambahkan dukungan untuk membangun partisi product , memungkinkan penggunaan citra sistem tunggal untuk beberapa SKU perangkat lunak yang disediakan oleh citra product.img yang berbeda. Sementara partisi product ditujukan untuk SKU perangkat lunak, partisi odm ditujukan untuk SKU perangkat keras.

Dengan produk khusus dan partisi ODM, 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 dibagikan di antara beberapa perangkat berdasarkan SoC yang diberikan.

Menggunakan partisi terpisah memiliki kelemahan, seperti kesulitan dalam mengelola ruang disk (misalnya, Anda harus memesan 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 ), 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 waktu proses (RRO) /odm/overlay/*.apk
Aplikasi /odm/app/*.apk
Aplikasi pribadi /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 kustom mendukung penyalinan artefak ke dalam gambar, tetapi tidak dapat menginstal modul ke partisi tertentu dengan menentukan partisi target sebagai bagian dari aturan build.
  • segera. custom_images tidak dapat dibuat menggunakan sistem pembangunan Soong.
  • pembaruan OTA. Gambar kustom digunakan sebagai gambar ROM pabrik yang tidak dapat diedit secara OTA.

Mempertahankan ABI antar partisi

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

Mempertahankan ABI antar partisi
Gambar 1. Mempertahankan ABI antar partisi
  • Tidak ada stabilitas ABI antara odm dan partisi vendor . Kedua partisi harus ditingkatkan secara bersamaan.
  • Partisi odm dan vendor dapat saling bergantung, tetapi partisi vendor harus bekerja 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 menerapkan partisi baru, tinjau perubahan AOSP terkait .

Menyiapkan partisi ODM

Untuk mengatur partisi odm , sertakan flag build ini:

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

Memasang 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 vendor dan partisi 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 , ganti referensi vendor hard-coded dengan satu set partisi berorientasi perangkat keras (saat ini odm dan vendor ). Lokasi referensi vendor terkenal di platform termasuk dynamic linker , package manager , dan shell/libc .