Halaman ini membahas cara mengonfigurasi fitur kernel baru sebagai modul GKI atau mengonfigurasi fitur kernel bawaan yang ada sebagai modul GKI.
Mengonfigurasi fitur baru sebagai modul GKI
Untuk fitur baru, edit
gki_defconfig
dan tetapkan item konfigurasi fitur kernel yang diperlukan darin
kem
(=m
). Tetapkan setelan ini diarch/arm64/configs/gki_defconfig
danarch/x86/configs/gki_defconfig
.Tambahkan file KO (
.ko
) yang dibuat untuk fitur ke bagianCOMMON_GKI_MODULES_LIST
dicommon/modules.bzl
. Tambahkan file dalam urutan yang diurutkan. Jika Anda tidak yakin dengan semua file yang dihasilkan, build akan gagal dan mencantumkan semua file KO yang diperlukan untuk ditambahkan ke daftar.Untuk Android 14, tambahkan set file KO yang sama dari langkah 2, yang diurutkan dalam urutan menaik untuk penelusuran biner saat runtime, ke
common/android/gki_{ARCH}_protected_modules
untuk menetapkan modul sebagai modul GKI yang dilindungi.Untuk Android 14 dan 15, perbarui daftar ekspor sehingga menyertakan ekspor yang baru ditambahkan di
common/android/abi_gki_protected_exports_ARCHITECTURE
. Misalnya, untuk memperbarui daftar, jalankantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
.Pastikan file KO yang baru ditambahkan dari langkah 2 disalin ke
out/<androidX-Y.Z>/dist/system_dlkm.img
danout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
kernel. Modul dalam arsipsystem_dlkm_staging_archive.tar.gz
dapat digunakan sebagai input untuk membuatsystem_dlkm.img
dalam build platform.Kirim perubahan Anda untuk ditinjau. Modul GKI adalah fitur kernel khusus Android, sehingga patch konversi modul tidak perlu dikirimkan ke upstream. Namun, Anda harus mengikuti panduan lain untuk mengirimkan patch Android Common Kernel (ACK).
Mengonfigurasi fitur bawaan kernel sebagai modul GKI
Untuk fitur kernel bawaan yang ada, edit
gki_defconfig
dan tetapkan item konfigurasi fitur kernel yang diperlukan dariy
kem
(=m
). Tetapkan setelan ini diarch/arm64/configs/gki_defconfig
danarch/x86/configs/gki_defconfig
.Tambahkan file KO (
.ko
) yang dibuat untuk fitur ke bagianCOMMON_GKI_MODULES_LIST
daricommon/modules.bzl
. Tambahkan file dalam urutan yang diurutkan. Jika Anda tidak yakin dengan semua file yang dihasilkan, build akan gagal dan mencantumkan semua file KO yang diperlukan untuk ditambahkan ke daftar.Untuk Android 14, tambahkan set file KO yang sama dari langkah 2, yang diurutkan dalam urutan menaik untuk penelusuran biner saat runtime, ke
common/android/gki_{ARCH}_protected_modules
untuk menetapkan modul sebagai modul GKI yang dilindungi.Untuk Android 14 dan 15, perbarui daftar ekspor yang dilindungi untuk menyertakan ekspor dari modul yang baru ditambahkan di
common/android/abi_gki_protected_exports_{ARCH}
menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
.Pastikan file KO modul yang baru dikonversi dari langkah 2 disalin ke
out/<androidX-Y.Z>/dist/system_dlkm.img
danout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
kernel. Modul dalam arsipsystem_dlkm_staging_archive.tar.gz
dapat digunakan sebagai input untuk membuatsystem_dlkm.img
dalam build platform.Kirim perubahan Anda untuk ditinjau. Modul GKI adalah fitur kernel khusus Android, sehingga patch konversi modul tidak perlu dikirimkan ke upstream. Namun, Anda harus mengikuti panduan lainnya untuk mengirimkan patch Android Common Kernel (ACK).
Mengonversi modul GKI terlindungi menjadi tidak terlindungi
Untuk Android 15 dan yang lebih tinggi, tambahkan modul yang dikonversi dari terlindungi menjadi tidak terlindungi ke daftar
COMMON_UNPROTECTED_MODULES_LIST
dalam filecommon/modules.bzl
.Untuk Android 14, hapus modul yang dikonversi dari dilindungi menjadi tidak dilindungi dari daftar modul yang dilindungi di
common/android/gki_protected_modules
.Untuk Android 14 dan 15, perbarui daftar ekspor yang dilindungi untuk mengecualikan ekspor dari modul yang baru dikonversi dan tidak dilindungi di
common/android/abi_gki_protected_exports_{ARCH}
menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
.Kirim perubahan Anda untuk ditinjau. Modul GKI adalah fitur kernel khusus Android, sehingga patch konversi modul tidak perlu dikirimkan ke upstream. Namun, Anda harus mengikuti panduan lainnya untuk mengirimkan patch Android Common Kernel (ACK).
Panduan singkat penyelesaian pelanggaran simbol modul GKI
Jika modul yang tidak ditandatangani melanggar perlindungan simbol yang diterapkan untuk modul GKI, dua jenis error dapat terjadi selama pemuatan modul, sehingga menyebabkan kegagalan.
1. Modul yang tidak ditandatangani menggunakan simbol terlindungi
Error:
module: Protected symbol: some_kernel_function (err -13)
Penyebab:
File module.ko
adalah modul vendor yang tidak bertanda tangan dan mencoba menyelesaikan
simbol yang diekspor modul GKI some_kernel_function
selama pemuatan, tanpa
dicantumkan dalam daftar simbol vendor.
Penyelesaian:
Jika module.ko
bukan modul GKI yang dilindungi, memperbarui daftar simbol akan menyelesaikan error dengan menyertakan some_kernel_function
dalam daftar simbol vendor.
Atau, gunakan versi GKI module.ko
.
2. Modul yang tidak ditandatangani mengekspor simbol yang dilindungi
Error:
module: exports protected symbol some_kernel_function
Penyebab:
Modul yang mengekspor some_kernel_function
adalah modul GKI yang dilindungi, dan
module.ko
kemungkinan adalah versi kustom yang tidak bertanda tangan dari modul tersebut. Saat
module.ko
mencoba mengekspor some_kernel_function
, yang hanya dapat diekspor
oleh modul GKI bertanda tangan, pemuatan gagal dengan pesan ini.
Penyelesaian:
Hal ini dapat diperbaiki dengan menggunakan modul versi GKI yang mengekspor
some_kernel_function
, jika modul yang tidak bertanda tangan adalah versi kustom.