Modul GKI dan GKI dapat diupdate secara independen dari bagian partisi lainnya
karena modul GKI berada di partisi dinamis terpisah dalam image super
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; untuk memuat modul
dengan benar selama runtime, modul GKI dan GKI harus dibangun dan diupdate
saat digunakan bersama.
Menerapkan dukungan partisi system_dklm
Partisi system_dlkm
berada di partisi super sebagai partisi dinamis lainnya
partisi. Partisi ini dapat berisi:
- Modul kernel yang ditandatangani waktu 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 dibangun
saat digunakan bersama. Oleh karena itu, Anda harus mengidentifikasi modul kernel dalam build GKI untuk
arsitektur target dan menyediakannya sebagai sumber untuk partisi system_dlkm
selama pembangunan platform.
Untuk Android 13
Arahkan BOARD_SYSTEM_DLKM_SRC
ke folder yang berisi modul GKI yang diperlukan
file objek kernel untuk perangkat sebagai input bagi sistem build untuk menghasilkan
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 dalam BOARD_SYSTEM_DLKM_SRC
akan diinstal di
$ANDROID_PRODUCT_OUT/system_dlkm
.
Untuk Android 14
Kami telah menyederhanakan penerapan dengan makro
(BOARD_*_KERNEL_MODULES
) sedang digunakan untuk
partisi *_dlkm
. 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 GKI
Kernel arm64
5.15
dari bawaan:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Pasang system_dlkm
saat runtime
Tergantung 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. Pada pemasangan yang berhasil, simbolik
link di /system/lib/modules
yang mengarah ke /system_dlkm/lib/modules
adalah
yang 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 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