Modul GKI dan GKI dapat diperbarui secara terpisah dari partisi lainnya karena modul GKI berada pada partisi dinamis terpisah dalam image super yang disebut system_dlkm
. Modul GKI ditandatangani oleh Google menggunakan pasangan kunci waktu pembuatan kernel dan hanya kompatibel dengan GKI yang digunakan untuk membuatnya. Tidak ada stabilitas ABI antara modul GKI dan GKI; agar modul dapat dimuat dengan benar saat runtime, modul GKI dan GKI harus dibuat dan diperbarui secara bersamaan.
Menerapkan dukungan partisi system_dklm
Partisi system_dlkm
terletak di partisi super sebagai partisi dinamis lainnya. Partisi ini dapat berisi:
- Modul kernel bertanda tangan waktu build Google
- artefak
depmod
Bangun system_dlkm
Membangun system_dlkm
adalah proses yang mirip dengan membangun 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 di file
device.mk
untuk perangkat Anda:AB_OTA_PARTITIONS += system_dlkm
Identifikasi modul kernel untuk disalin ke system_dlkm
Agar modul berhasil dimuat saat runtime, modul GKI dan GKI harus dibuat bersama-sama. Oleh karena itu, Anda harus mengidentifikasi modul kernel di 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 guna menghasilkan partisi system_dlkm
. Misalnya:
Sediakan sumber modul GKI dalam folder dan arahkan BOARD_SYSTEM_DLKM_SRC
ke folder tersebut. Misalnya:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Pada waktu pembuatan, modul yang terdaftar di BOARD_SYSTEM_DLKM_SRC
dipasang 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 pembuatan, modul ini dipasang di $ANDROID_PRODUCT_OUT/system_dlkm
. Setiap modul di partisi vendor_dlkm
yang memiliki ketergantungan pada modul di partisi system_dlkm
menghasilkan referensi yang benar dalam file modules.dep
untuk partisi vendor_dlkm
. Karena ketergantungan lintas partisi yang diwakili oleh modules.dep
, ketika modul vendor dimuat, modul GKI apa pun yang diperlukan akan dimuat secara otomatis.
Misalnya, untuk menginstal semua modul GKI pada partisi system_dlkm
untuk kernel GKI arm64
5.15
dari bawaan:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Pasang system_dlkm
saat runtime
Bergantung pada sistem file yang digunakan sebagai sistem file read-only, tambahkan yang berikut ini di fstab
Anda untuk memasang partisi system_dlkm
saat runtime:
ext4
sebagai sistem file read-only
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 read-only. Jika pemasangan berhasil, tautan simbolis di /system/lib/modules
yang menunjuk ke /system_dlkm/lib/modules
tersedia.
Proses vendor, seperti skrip .rc
, kemudian dapat memuat modul kernel berdasarkan urutan yang ditentukan dalam modules.load
. Proses vendor harus menggunakan tautan simbolik /system/lib/modules
untuk memuat modul. Jika diperlukan, 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 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;
Validasi partisi system-dlkm
Google menyediakan test case GKI VTS untuk memverifikasi partisi system_dlkm
. Untuk menjalankan pengujian secara manual, gunakan perintah atest
berikut:
atest -c vts_dlkm_partition_test