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_defconfigdan tetapkan item konfigurasi fitur kernel yang diperlukan darinkem(=m). Tetapkan setelan ini diarch/arm64/configs/gki_defconfigdanarch/x86/configs/gki_defconfig.Tambahkan file KO (
.ko) yang dibuat untuk fitur ke bagian_COMMON_GKI_MODULES_LISTdari file berikut. Tambahkan file dalam urutan yang diurutkan. Jika Anda tidak yakin dengan semua file yang dibuat, build akan gagal dan mencantumkan semua file KO yang diperlukan untuk ditambahkan ke daftar.- Di
android17-6.18dan yang lebih tinggi, tambahkan item kecommon/bazel/modules_private.bzl. - Di
android16-6.12dan yang lebih rendah, tambahkan item kecommon/modules.bzl.
- Di
Untuk Android 14, tambahkan kumpulan file KO yang sama dari langkah 2, yang diurutkan dalam urutan menaik untuk penelusuran biner saat runtime, ke
common/android/gki_{ARCH}_protected_modulesuntuk 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_exportsuntukaarch64.Pastikan file KO yang baru ditambahkan dari langkah 2 disalin ke
out/<androidX-Y.Z>/dist/system_dlkm.imgdanout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzkernel. Modul dalam arsipsystem_dlkm_staging_archive.tar.gzdapat digunakan sebagai input untuk menghasilkansystem_dlkm.imgdalam 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).
Mengonfigurasi fitur bawaan kernel sebagai modul GKI
Untuk fitur kernel bawaan yang ada, edit
gki_defconfigdan tetapkan item konfigurasi fitur kernel yang diperlukan dariykem(=m). Tetapkan setelan ini diarch/arm64/configs/gki_defconfigdanarch/x86/configs/gki_defconfig.Tambahkan file KO (
.ko) yang dibuat untuk fitur ke bagian_COMMON_GKI_MODULES_LISTdari file berikut. Tambahkan file dalam urutan yang diurutkan. Jika Anda tidak yakin dengan semua file yang dibuat, build akan gagal dan mencantumkan semua file KO yang diperlukan untuk ditambahkan ke daftar.- Di
android17-6.18dan yang lebih tinggi, tambahkan item kecommon/bazel/modules_private.bzl. - Di
android16-6.12dan yang lebih rendah, tambahkan item ke `common/modules.bzl.
- Di
Untuk Android 14, tambahkan kumpulan file KO yang sama dari langkah 2, yang diurutkan dalam urutan menaik untuk penelusuran biner saat runtime, ke
common/android/gki_{ARCH}_protected_modulesuntuk 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_exportsuntukaarch64.Pastikan file KO modul yang baru dikonversi dari langkah 2 disalin ke kernel
out/<androidX-Y.Z>/dist/system_dlkm.imgdanout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Modul dalam arsipsystem_dlkm_staging_archive.tar.gzdapat digunakan sebagai input untuk menghasilkansystem_dlkm.imgdalam 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 yang dilindungi menjadi tidak dilindungi
Untuk Android 15 dan yang lebih tinggi, tambahkan modul yang dikonversi dari dilindungi menjadi tidak dilindungi ke daftar
_COMMON_UNPROTECTED_MODULES_LISTdi file berikut:- Di
android17-6.18dan yang lebih tinggi, tambahkan item kecommon/bazel/modules_private.bzl. - Di
android16-6.12dan yang lebih rendah, tambahkan item kecommon/modules.bzl.
- Di
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 tidak dilindungi yang baru dikonversi di
common/android/abi_gki_protected_exports_{ARCH}menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exportsuntukaarch64.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 yang dilindungi
Error:
module: Protected symbol: some_kernel_function (err -13)
Penyebab:
File module.ko adalah modul vendor yang tidak ditandatangani dan mencoba menyelesaikan simbol yang diekspor modul GKI some_kernel_function selama pemuatan, tanpa tercantum 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 dari 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 ditandatangani dari modul tersebut. Saat module.ko mencoba mengekspor some_kernel_function, yang hanya dapat diekspor oleh modul GKI yang ditandatangani, pemuatan akan gagal dengan pesan ini.
Penyelesaian:
Hal ini dapat diperbaiki dengan menggunakan versi GKI dari modul yang mengekspor some_kernel_function, jika modul yang tidak ditandatangani adalah versi kustom.