Partisi DLKM vendor dan ODM

Android 11 memperkenalkan konsep Generic Kernel Image dan partisi booting vendor. Partisi booting vendor menyimpan modul kernel yang kompatibel dengan GKI, dan dimuat oleh init tahap pertama. Modul Kernel sebelum rilis Android 11 juga disimpan di partisi vendor dan ODM, serta dimuat oleh proses vendor.

Untuk Android 11 atau yang lebih tinggi, kernel dan semua modul kernel dapat diupdate secara terpisah dari partisi lainnya. Untuk mengaktifkan update untuk modul kernel yang disimpan di partisi vendor (tanpa update partisi vendor), pindahkan semua modul partisi vendor ke partisi baru yang disebut Vendor DLKM (modul kernel yang dapat dimuat secara dinamis). Kemudian, Anda dapat memperbarui partisi ini secara terpisah. Demikian pula, Anda dapat memindahkan semua modul kernel yang disimpan di partisi ODM ke partisi baru yang disebut ODM DLKM. Partisi ini juga dapat diupdate secara independen.

Lokasi partisi

Partisi vendor_dlkm dan odm_dlkm terletak di partisi super sebagai partisi dinamis lainnya.

konten vendor_dlkm di /vendor/lib/modules

  • Modul kernel vendor
  • File konfigurasi modprobe
  • File modules.load

Konten odm_dlkm di /odm/lib/modules

  • Modul kernel ODM
  • File konfigurasi modprobe
  • File modules.load

Lihat Dukungan Modul Kernel untuk mengetahui detail selengkapnya tentang file konfigurasi modul kernel.

Dukungan build

Mem-build vendor_dlkm dan odm_dlkm adalah proses yang mirip dengan mem-build partisi dinamis lainnya.

Contoh build vendor_dlkm

Build vendor_dlkm seperti yang ditunjukkan pada contoh berikut.

BoardConfig.mk

BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm

Ganti <GROUP_NAME> dengan nama grup update yang sesuai. Grup update harus merupakan grup tempat partisi vendor berada.

Untuk perangkat A/B dan Virtual A/B, device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

Tambahkan entri berikut untuk vendor_dlkm ke fstab. Ubah tanda sesuai dengan perangkat. Gunakan CL Add vendor_dlkm to CF sebagai contoh.

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

contoh build odm_dlkm

Build odm_dlkm seperti yang ditunjukkan dalam contoh berikut.

BoardConfig.mk

BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm

Untuk perangkat A/B dan Virtual A/B, device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

Tambahkan entri berikut untuk odm_dlkm ke fstab. Mengubah flag sesuai dengan perangkat. Gunakan CL Add odm_dlkm to CF sebagai contoh.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Menyalin modul kernel ke dalam partisi

Untuk memilih modul kernel yang ingin disalin ke partisi vendor_dlkm, cantumkan modul tersebut di BOARD_VENDOR_KERNEL_MODULES.

Jika ingin mengganti konten modules.load, Anda dapat menentukannya di BOARD_VENDOR_KERNEL_MODULES_LOAD.

Pada waktu build, modul yang tercantum di BOARD_VENDOR_KERNEL_MODULES diinstal di $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. Link simbolis dibuat di /vendor/lib/modules yang mengarah ke /vendor_dlkm/lib/modules.

Demikian pula, untuk memilih modul kernel yang ingin disalin ke dalam partisi odm_dlkm, cantumkan modul tersebut di BOARD_ODM_KERNEL_MODULES. Build platform menjalankan depmod pada modul dan menyalin file output depmod ke dalam image. Build membuat file modules.load dan menyimpannya dalam image. File ini berisi semua modul yang tercantum di BOARD_ODM_KERNEL_MODULES.

Jika ingin mengganti konten modules.load, Anda dapat menentukannya di BOARD_ODM_KERNEL_MODULES_LOAD.

Pada waktu build, modul yang tercantum di BOARD_ODM_KERNEL_MODULES diinstal di $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. Link simbolis dibuat di /odm/lib/modules yang mengarah ke /odm_dlkm/lib/modules.

Selalu gunakan /vendor/lib/modules dan /odm/lib/modules untuk modul kernel vendor dan ODM.

Jangan pernah gunakan /vendor_dlkm/lib/modules. Perangkat tanpa partisi vendor_dlkm akan menginstal BOARD_VENDOR_KERNEL_MODULES ke /vendor/lib/modules secara langsung. Hal ini menjadi masalah karena /vendor_dlkm/lib/modules tidak ada.

Jangan pernah menggunakan /odm_dlkm/lib/modules. Perangkat tanpa partisi odm_dlkm akan menginstal BOARD_ODM_KERNEL_MODULES ke /odm/lib/modules secara langsung. Hal ini bermasalah karena /odm_dlkm/lib/modules tidak ada.

Pemasangan partisi dan pemuatan modul

Selama first_stage_init, partisi vendor_dlkm dan odm_dlkm dipasang di direktori /vendor_dlkm dan /odm_dlkm. Jika hal ini terjadi, symlink di /vendor/lib/modules dan /odm/lib/modules akan tersedia.

Proses vendor (seperti skrip .rc) kemudian dapat memuat modul kernel berdasarkan urutan yang ditentukan dalam modules.load. Proses vendor juga dapat memuat modul di lain waktu, jika perlu.

Untuk dokumentasi terkait pembuatan partisi booting vendor (yang berisi RAMDisk vendor), lihat Dukungan Modul Kernel.