GKI dan modul GKI dapat diupdate secara terpisah dari partisi lainnya karena modul GKI berada di partisi dinamis terpisah dalam super image
yang disebut system_dlkm
. Modul GKI ditandatangani oleh Google menggunakan pasangan kunci waktu pembuatan kernel dan hanya kompatibel dengan GKI yang digunakan untuk membangunnya.
Tidak ada stabilitas ABI antara GKI dan modul GKI; agar modul dapat dimuat dengan benar selama runtime, GKI dan modul GKI harus dibangun dan diupdate bersama-sama.
Menerapkan dukungan partisi system_dklm
Partisi system_dlkm
terletak di partisi super sebagai partisi dinamis
lainnya. Partisi ini dapat berisi:
- Modul kernel yang ditandatangani saat waktu pembuatan Google
depmod
artefak
Versi system_dlkm
Membuat system_dlkm
adalah proses yang serupa dengan membuat partisi
dinamis lainnya. Lakukan langkah-langkah berikut untuk menambahkan system_dlkm
ke build Anda:
Di
BoardConfig.mk
, tambahkan entri berikut:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
Di daftar partisi, tambahkan
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(Opsional) Untuk perangkat A/B dan A/B virtual, tambahkan baris berikut di file
device.mk
untuk perangkat Anda:AB_OTA_PARTITIONS += system_dlkm
Identifikasi modul kernel yang akan disalin ke system_dlkm
Agar modul berhasil dimuat saat runtime, GKI dan modul GKI harus dibangun bersama. Oleh karena itu, Anda harus mengidentifikasi modul kernel dalam build GKI untuk arsitektur target dan menyediakannya sebagai sumber untuk partisi system_dlkm
selama build platform.
Untuk Android 13
Arahkan BOARD_SYSTEM_DLKM_SRC
ke folder yang berisi file objek kernel modul GKI yang diperlukan untuk perangkat sebagai input ke sistem build untuk membuat partisi system_dlkm
. Contoh:
Sediakan sumber modul GKI dalam folder dan arahkan BOARD_SYSTEM_DLKM_SRC
ke folder tersebut. Contoh:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Pada waktu build, modul yang tercantum di BOARD_SYSTEM_DLKM_SRC
diinstal di
$ANDROID_PRODUCT_OUT/system_dlkm
.
Untuk Android 14
Kami telah menyederhanakan penerapan dengan makro
(BOARD_*_KERNEL_MODULES
) yang digunakan untuk partisi
*_dlkm
lainnya. Daftar modul GKI yang diperlukan untuk perangkat harus
dirujuk oleh makro BOARD_SYSTEM_KERNEL_MODULES
. Pada waktu build, modul ini
diinstal di $ANDROID_PRODUCT_OUT/system_dlkm
. Modul apa pun di partisi
vendor_dlkm
yang memiliki dependensi pada modul di partisi system_dlkm
akan menghasilkan referensi yang benar dalam file modules.dep
untuk partisi
vendor_dlkm
. Karena dependensi lintas partisi yang diwakili oleh modules.dep
, saat modul vendor dimuat, modul GKI yang diperlukan akan dimuat secara otomatis.
Misalnya, untuk menginstal semua modul GKI di partisi system_dlkm
untuk kernel arm64
GKI 5.15
dari prebuilt:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Memasang system_dlkm
saat runtime
Bergantung pada sistem file yang digunakan sebagai sistem file hanya baca, tambahkan kode berikut di fstab
untuk memasang partisi system_dlkm
saat runtime:
ext4
sebagai sistem file hanya baca
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
sebagai sistem file hanya baca
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
Pemasangan partisi dan pemuatan modul
Selama first_stage_init
, partisi system_dlkm
dipasang di
/system_dlkm
sebagai sistem file hanya baca. Jika pemasangan berhasil, link simbolis di /system/lib/modules
yang mengarah ke /system_dlkm/lib/modules
akan tersedia.
Proses vendor, seperti skrip .rc
, kemudian dapat memuat modul kernel
berdasarkan urutan yang ditentukan dalam modules.load
. Proses vendor harus menggunakan
link simbolis /system/lib/modules
untuk memuat modul.
Jika perlu, proses vendor juga dapat memuat modul di lain waktu.
SELinux
Setiap file di partisi system_dlkm
diberi label dengan konteks file
system_dlkm_file
. Untuk memuat file modul GKI di partisi system_dlkm
, proses vendor yang bertanggung jawab untuk memuat modul memerlukan sepolicy
di domain vendor.
Misalnya, dlkm_loader
yang digunakan oleh Cuttlefish untuk memuat modul GKI memiliki
izin berikut dalam file kebijakan di
shared/sepolicy/vendor/dlkm_loader.te
:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
Memvalidasi partisi system-dlkm
Google menyediakan kasus pengujian VTS GKI untuk memverifikasi partisi system_dlkm
. Untuk
memanggil pengujian secara manual, gunakan perintah atest
berikut:
atest -c vts_dlkm_partition_test