Menerapkan partisi modul GKI

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:

  1. 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
    
  2. Dalam daftar partisi, tambahkan system_dlkm : BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (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