Image kernel generik (GKI) mungkin tidak berisi dukungan driver yang diperlukan untuk
memungkinkan perangkat memasang partisi. Untuk mengaktifkan perangkat agar dapat memasang partisi dan
melanjutkan booting, init
tahap pertama ditingkatkan untuk memuat
modul kernel yang ada di ramdisk. Ramdisk dibagi menjadi ramdisk generik dan
vendor. Modul kernel vendor disimpan di ramdisk vendor. Urutan pemuatan modul kernel dapat dikonfigurasi.
Lokasi modul
Ramdisk adalah sistem file untuk init,
tahap pertama dan untuk image recovery/fastbootd di perangkat A/B dan A/B virtual. initramfs
adalah
initramfs
yang terdiri dari dua arsip cpio yang digabungkan oleh
bootloader. Arsip cpio pertama, yang disimpan sebagai ramdisk vendor
di partisi vendor-boot, berisi komponen berikut:
- Modul kernel vendor
init
tahap pertama, yang terletak di/lib/modules/
. - File konfigurasi
modprobe
, yang berada di/lib/modules/
:modules.dep
,modules.softdep
,modules.alias
,modules.options
. - File
modules.load
yang menunjukkan modul mana yang akan dimuat selama inisialisasi tahap pertama, dan dalam urutan apa, di/lib/modules/
. - Modul kernel pemulihan vendor, untuk perangkat A/B dan A/B Virtual, di
/lib/modules/
modules.load.recovery
yang menunjukkan modul yang akan dimuat, dan urutannya, untuk perangkat A/B dan A/B Virtual, 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 dalam inisialisasi tahap pertama
init
tahap pertama dimulai dengan membaca file konfigurasi modprobe dari /lib/modules/
di ramdisk. Selanjutnya, ia 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 mungkin berbeda untuk memenuhi dependensi berat atau ringan.
Membangun dukungan, inisialisasi tahap pertama
Untuk menentukan modul kernel yang akan disalin ke vendor ramdisk cpio, cantumkan
modul tersebut di BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. Build berjalan
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 di
BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. Untuk mengganti isi
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 penuh
Seperti pada rilis Android 10 dan yang lebih rendah, modul kernel yang tercantum di
BOARD_VENDOR_KERNEL_MODULES
disalin oleh build platform Android
ke 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 pada rilis Android sebelumnya. Anda yang memutuskan
cara dan waktu pemuatan modul ini, meskipun biasanya dilakukan menggunakan
skrip init.rc
.
Karakter pengganti dan build kernel terintegrasi
Vendor yang menggabungkan build kernel perangkat mereka dengan build platform Android mungkin mengalami masalah saat menggunakan makro BOARD
yang disebutkan di atas untuk menentukan modul kernel yang akan disalin ke perangkat. Jika vendor ingin menghindari pencantuman modul kernel dalam file build platform perangkat, mereka dapat menggunakan karakter pengganti ($(wildcard device/vendor/mydevice/*.ko
). Perhatikan bahwa karakter pengganti tidak berfungsi dalam kasus build kernel terintegrasi, karena saat make dipanggil dan makro diperluas dalam makefile, modul kernel belum dibangun, sehingga makro kosong.
Untuk mengatasi masalah ini, vendor dapat membuat build kernel yang membuat arsip zip 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 pembuatan yang memastikan build platform dapat membuat arsip saat diperlukan.
Pemulihan
Pada rilis Android sebelumnya, modul kernel yang diperlukan untuk pemulihan
ditentukan dalam BOARD_RECOVERY_KERNEL_MODULES
. Di Android 12,
modul kernel yang diperlukan untuk pemulihan masih
ditentukan menggunakan makro ini. Namun, modul kernel pemulihan disalin ke
cpio ramdisk vendor, bukan cpio ramdisk generik. Secara default, semua
modul kernel yang tercantum di BOARD_RECOVERY_KERNEL_MODULES
dimuat
selama init
tahap pertama. Jika Anda hanya ingin memuat sebagian modul ini, 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.