Partisi ODM

Android 10 menyertakan dukungan untuk mem-build partisi odm menggunakan sistem build Android.

Tentang partisi ODM

Produsen desain asli (ODM) menyesuaikan paket dukungan papan (BSP) vendor sistem-di-chip (SoC) ke perangkat tertentu (papan mereka). Hal ini memungkinkan mereka menerapkan modul kernel untuk komponen khusus board, daemon khusus board, atau fitur mereka sendiri di hardware abstraction layer (HAL). Mereka mungkin juga ingin mengganti atau menyesuaikan komponen SoC.

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

Menggunakan partisi produk dan ODM

Android 9 menambahkan dukungan untuk mem-build partisi product, yang memungkinkan penggunaan satu image sistem untuk beberapa SKU software yang disediakan oleh image product.img yang berbeda. Meskipun partisi product ditujukan untuk SKU software, partisi odm ditujukan untuk SKU hardware.

Dengan partisi produk dan ODM khusus, Anda dapat menggunakan partisi system untuk menghosting kode generik guna dibagikan di antara banyak SKU software, dan partisi vendor untuk menghosting kode BSP khusus SoC guna dibagikan di antara beberapa perangkat berdasarkan SoC tertentu.

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 akan menghapus masalah disk, dan memungkinkan pembagian ulang perangkat selama update 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
Library native /odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
Data objek VINTF /odm/etc/vintf
File init.rc /odm/etc/init
Properti sistem /odm/build.prop
Overlay resource runtime (RRO) /odm/overlay/*.apk
Aplikasi /odm/app/*.apk
Priv-apps /odm/priv-app/*.apk
Library Java /odm/framework/*.jar
Konfigurasi sistem Framework Android /odm/etc/sysconfig/* dan /odm/etc/permissions/*

Tidak ada gambar kustom

Jangan gunakan image kustom karena tidak memiliki dukungan untuk hal berikut:

  • Penginstalan 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.
  • Soong. custom_images tidak dapat di-build menggunakan sistem build Soong.
  • Update OTA. Gambar kustom digunakan sebagai gambar ROM pabrik yang tidak dapat di-OTA.

Mempertahankan ABI di antara partisi

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

Mempertahankan ABI di antara partisi

Gambar 1. Mempertahankan ABI di antara partisi.

  • Tidak ada stabilitas ABI antara partisi odm dan vendor. Kedua partisi harus diupgrade secara bersamaan.
  • Partisi odm dan vendor dapat saling bergantung, tetapi 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 partisi vendor atau odm tidak diizinkan. (Hal ini diterapkan oleh SEpolicy.)

Menerapkan partisi ODM

Sebelum menerapkan partisi baru, tinjau perubahan AOSP terkait.

Menyiapkan partisi ODM

Untuk menyiapkan 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 dalam PRODUCT_ODM_PROPERTIES += product.abc=ok

Menginstal modul ke partisi ODM

Gunakan flag build ini untuk menginstal modul ke partisi odm:

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

Mengaktifkan Booting Terverifikasi

Untuk mencegah software berbahaya mengubah 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 mengetahui detail tentang cara mengonfigurasi AVB pada partisi dinamis, lihat perubahan konfigurasi AVB.

Memperlakukan /odm sebagai partisi /vendor lain

Untuk memastikan sistem menangani partisi odm sebagai partisi vendor, ganti referensi vendor hard code dengan kumpulan partisi berorientasi hardware (saat ini odm dan vendor). Lokasi referensi vendor yang penting di platform mencakup penaut dinamis, pengelola paket, dan shell/libc.