Image kernel generik (GKI) mungkin tidak berisi dukungan driver yang diperlukan untuk
memungkinkan perangkat memasang partisi. Agar perangkat dapat memasang partisi dan
melanjutkan booting, init
tahap pertama ditingkatkan untuk memuat
modul kernel yang ada di ramdisk. Ramdisk dibagi menjadi ramdisk umum dan
vendor. Modul kernel vendor disimpan di ramdisk vendor. Urutan
modul kernel yang dimuat dapat dikonfigurasi.
Lokasi modul
Ramdisk adalah sistem file untuk init,
tahap pertama dan untuk
image recovery/fastbootd di perangkat A/B dan virtual A/B. Ini adalah
initramfs
yang terdiri dari dua arsip cpio yang digabungkan oleh
bootloader. Arsip cpio pertama, yang disimpan sebagai ramdisk vendor
di partisi booting vendor, berisi komponen berikut:
- Modul kernel vendor
init
tahap pertama, yang terletak di/lib/modules/
. - File konfigurasi
modprobe
, yang terletak di/lib/modules/
:modules.dep
,modules.softdep
,modules.alias
,modules.options
. - File
modules.load
yang menunjukkan modul mana yang akan dimuat selama init tahap pertama, dan urutannya, dalam/lib/modules/
. - Modul kernel pemulihan vendor, untuk perangkat A/B dan Virtual A/B, di
/lib/modules/
modules.load.recovery
yang menunjukkan modul yang akan dimuat, dan urutan, untuk perangkat A/B dan Virtual A/B, di/lib/modules
.
Arsip cpio kedua, yang disertakan dengan GKI
sebagai ramdisk boot.img dan diterapkan di atas
yang pertama, berisi first_stage_init
dan library yang menjadi dependensinya.
Pemuatan modul pada init tahap pertama
init
tahap pertama dimulai dengan membaca file konfigurasi
modprobe dari /lib/modules/
di ramdisk. Selanjutnya, modul ini membaca daftar
modul yang ditentukan dalam /lib/modules/modules.load
(atau dalam kasus
pemulihan, /lib/modules/modules.load.recovery
) dan mencoba
memuat setiap modul tersebut secara berurutan, mengikuti konfigurasi yang ditentukan dalam
file yang dimuat sebelumnya. Urutan yang diminta dapat menyimpang untuk
memenuhi dependensi hard atau soft.
Membangun dukungan, init tahap pertama
Untuk menentukan modul kernel yang akan disalin ke cpio ramdisk vendor, cantumkan
modul tersebut di BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. Build menjalankan
depmod
pada modul ini dan menempatkan file konfigurasi modprobe
yang dihasilkan di cpio ramdisk vendor.
Build juga membuat file modules.load
dan menyimpannya di cpio
ramdisk vendor. Secara default, file ini berisi semua modul yang tercantum dalam
BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. Untuk mengganti konten
file tersebut, gunakan BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
, seperti yang ditunjukkan
dalam contoh ini:
BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \ device/vendor/mydevice-kernel/first.ko \ device/vendor/mydevice-kernel/second.ko \ device/vendor/mydevice-kernel/third.ko
Dukungan build, Android lengkap
Seperti halnya rilis Android 10 dan yang lebih lama, modul kernel yang tercantum di
BOARD_VENDOR_KERNEL_MODULES
disalin oleh build platform
Android ke dalam partisi vendor di /vendor/lib/modules
. Build
platform menjalankan depmod
pada modul ini, dan menyalin
file output depmod
ke partisi vendor di lokasi
yang sama. Mekanisme untuk memuat modul kernel dari /vendor
tetap sama seperti untuk rilis Android sebelumnya. Andalah yang menentukan
bagaimana dan kapan memuat modul ini, meskipun biasanya hal ini dilakukan menggunakan
skrip init.rc
.
Karakter pengganti dan build kernel terintegrasi
Vendor yang menggabungkan build kernel perangkat mereka dengan build platform Android
dapat mengalami masalah saat menggunakan makro BOARD
yang disebutkan di atas untuk
menentukan modul kernel yang akan disalin ke perangkat. Jika vendor ingin menghindari
listingan modul kernel dalam file build platform perangkat, mereka dapat menggunakan karakter pengganti
($(wildcard device/vendor/mydevice/*.ko
). Perhatikan bahwa karakter pengganti tidak
berfungsi pada kasus build kernel terintegrasi, karena saat make dipanggil dan
makro diperluas di makefile, modul kernel belum dibangun, sehingga makro
akan kosong.
Untuk mengatasi masalah ini, vendor dapat membuat build kernel mereka membuat arsip
zip yang berisi modul kernel yang akan disalin ke setiap partisi.
Tetapkan jalur arsip zip tersebut di BOARD_*_KERNEL_MODULES_ARCHIVE
dengan *
adalah nama partisi (seperti
BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
). Build platform Android
mengekstrak arsip zip ini ke lokasi yang sesuai dan menjalankan depmod
di modul.
Arsip zip modul kernel harus memiliki aturan make yang memastikan build platform dapat membuat arsip saat diperlukan.
Pemulihan
Pada rilis Android sebelumnya, modul kernel yang diperlukan untuk pemulihan
ditentukan di BOARD_RECOVERY_KERNEL_MODULES
. Di Android 12,
modul kernel yang diperlukan untuk pemulihan masih
ditentukan menggunakan makro ini. Namun, modul kernel pemulihan disalin ke
vendor ramdisk cpio, bukan ramdisk cpio generik. Secara default, semua
modul kernel yang tercantum dalam BOARD_RECOVERY_KERNEL_MODULES
dimuat
selama init
tahap pertama. Jika Anda hanya ingin sebagian modul
ini dimuat, tentukan konten subset tersebut di
BOARD_RECOVERY_KERNEL_MODULES_LOAD
.
Dokumentasi terkait
Untuk mempelajari cara membuat partisi booting vendor (yang berisi ramdisk vendor yang disebutkan di halaman ini), lihat Partisi booting.