Modul GKI dan GKI dapat diupdate secara terpisah dari partisi lainnya
karena modul GKI berada di partisi dinamis yang terpisah dalam super image
yang disebut system_dlkm
. Modul GKI ditandatangani oleh Google menggunakan pasangan kunci
build-time kernel dan hanya kompatibel dengan GKI yang digunakan untuk mem-build-nya.
Tidak ada stabilitas ABI antara modul GKI dan GKI; agar modul dimuat
dengan benar selama runtime, modul GKI dan GKI harus dibuat dan diupdate
bersama.
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 build Google
depmod
artefak
Versi system_dlkm
Mem-build system_dlkm
adalah proses yang mirip dengan mem-build 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
Dalam 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 dalam file
device.mk
untuk perangkat Anda:AB_OTA_PARTITIONS += system_dlkm
Mengidentifikasi modul kernel yang akan disalin ke system_dlkm
Agar modul berhasil dimuat saat runtime, modul GKI dan GKI harus di-build
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 bagi sistem build untuk menghasilkan
partisi system_dlkm
. Contoh:
Berikan 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 dalam BOARD_SYSTEM_DLKM_SRC
akan diinstal di
$ANDROID_PRODUCT_OUT/system_dlkm
.
Untuk Android 14
Kami telah menyederhanakan implementasi dengan makro
(BOARD_*_KERNEL_MODULES
) yang digunakan untuk partisi
*_dlkm
lainnya. Daftar modul GKI yang diperlukan untuk perangkat harus
direferensikan oleh makro BOARD_SYSTEM_KERNEL_MODULES
. Pada waktu build, modul ini
diinstal di $ANDROID_PRODUCT_OUT/system_dlkm
. Setiap modul dalam
partisi vendor_dlkm
yang memiliki dependensi pada modul dalam
partisi system_dlkm
akan menghasilkan referensi yang benar dalam file modules.dep
untuk
partisi vendor_dlkm
. Karena dependensi lintas partisi yang direpresentasikan
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 yang telah dibuat sebelumnya:
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 dalam 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 ditetapkan 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 dalam 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 sistem-dlkm
Google menyediakan kasus pengujian GKI VTS untuk memverifikasi partisi system_dlkm
. Untuk
memanggil pengujian secara manual, gunakan perintah atest
berikut:
atest -c vts_dlkm_partition_test