Partisi ODM

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

Tentang partisi ODM

Produsen desain asli (ODM) menyesuaikan vendor sistem di chip (SoC) paket dukungan board (BSP) ke perangkat khusus mereka (board mereka). Ini memungkinkan mereka untuk mengimplementasikan modul {i>kernel<i} untuk komponen khusus Board, {i>daemon<i} khusus board, atau fiturnya sendiri pada lapisan abstraksi hardware (HAL). Mereka mungkin juga ingin mengganti atau menyesuaikan komponen SoC.

Dalam rilis Android yang lebih rendah, penyesuaian tersebut mencegah penggunaan gambar vendor untuk perangkat dengan SoC yang sama (atau dengan SoC yang berbeda, tetapi dengan 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 membuat product partisi, yang memungkinkan penggunaan satu image sistem untuk beberapa software SKU yang disediakan oleh gambar product.img yang berbeda. Sementara Partisi product ditujukan untuk SKU software, Partisi odm ditujukan untuk SKU hardware.

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

Menggunakan partisi terpisah memiliki kekurangan, seperti kesulitan dalam mengelola kapasitas {i>disk<i} (misalnya, Anda harus memiliki jumlah ruang yang terbatas untuk masa mendatang pertumbuhan). Namun, dukungan Android 10 untuk partisi dinamis menghilangkan masalah {i>disk<i}, dan membuat partisi ulang perangkat selama memungkinkan update over-the-air (OTA).

Komponen ODM

Partisi odm berisi komponen khusus ODM berikut (serupa 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
Kebijakan SE /odm/etc/selinux
Objek VINTF data /odm/etc/vintf
init.rc file /odm/etc/init
Properti sistem /odm/build.prop
Overlay resource runtime (RRO) /odm/overlay/*.apk
Aplikasi /odm/app/*.apk
Aplikasi khusus /odm/priv-app/*.apk
Library Java /odm/framework/*.jar
Konfigurasi sistem Android Framework /odm/etc/sysconfig/* dan /odm/etc/permissions/*

Tidak ada gambar kustom

Jangan gunakan khusus image karena tidak mendukung hal berikut:

  • Penginstalan modul ke target tertentu. Gambar kustom mendukung penyalinan artefak ke dalam gambar, tetapi tidak dapat dilakukan menginstal modul ke partisi tertentu dengan menentukan partisi target sebagai bagian dari aturan build.
  • Segera. custom_images tidak dapat dibuat menggunakan sistem build Soong.
  • Update OTA. Image kustom digunakan sebagai {i>factory ROM<i} yang tidak dapat di-OTA.

Mempertahankan ABI di antara partisi

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

Mempertahankan ABI di antara partisi

Gambar 1. Mempertahankan ABI antarpartisi.

  • Tidak ada stabilitas ABI antara odm dan partisi vendor. Kedua partisi harus diupgrade secara bersamaan baik.
  • Partisi odm dan vendor dapat bergantung pada satu sama lain, 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 bukan diizinkan. (Hal ini diberlakukan oleh SEpolicy.)

Mengimplementasikan partisi ODM

Sebelum mengimplementasikan partisi baru, tinjau AOSP terkait perubahan.

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 partisi dinamis ukuran
  • Jenis sistem file BOARD_ODMIMAGE_FILE_SYSTEM_TYPE yang digunakan untuk Gambar ODM
  • PRODUCT_ODM_PROPERTIES untuk /odm/build.prop untuk gunakan 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

Aktifkan Booting Terverifikasi

Untuk mencegah software berbahaya mengutak-atik partisi odm, aktifkan Booting Terverifikasi Android (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 mengkonfigurasi AVB pada partisi dinamis, lihat Konfigurasi AVB perubahan.

Perlakukan /odm sebagai partisi /vendor lain

Untuk memastikan bahwa sistem menangani partisi odm sebagai partisi vendor, ganti vendor yang di-hard code referensi dengan serangkaian partisi berorientasi perangkat keras (saat ini odm dan vendor). vendor terkenal lokasi referensi di platform mencakup dinamis penaut, paket pengelola, dan shell/libc.