Halaman ini membahas cara mengonfigurasi fitur kernel baru sebagai modul GKI atau mengonfigurasi fitur kernel bawaan yang sudah ada sebagai modul GKI.
Konfigurasikan fitur baru sebagai modul GKI
Untuk fitur baru, edit
gki_defconfig
dan setel item konfigurasi fitur kernel yang diperlukan darin
kem
(=m
). Tetapkan pengaturan ini diarch/arm64/configs/gki_defconfig
danarch/x86/configs/gki_defconfig
.Tambahkan file KO (
.ko
) yang dihasilkan untuk fitur tersebut 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.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_modules
untuk menetapkan modul sebagai modul GKI yang dilindungi. Perbarui daftar ekspor yang dilindungi untuk menyertakan ekspor dari modul yang baru ditambahkan dicommon/android/abi_gki_protected_exports_{ARCH}
menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
. Modul yang ditetapkan sebagai modul GKI yang dilindungi masih harus disetujui oleh Google untuk menjadi modul resmi yang dilindungi.Pastikan file KO yang baru ditambahkan dari langkah 2 disalin ke
out/<androidX-YZ>/dist/system_dlkm.img
danout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Modul dalam arsipsystem_dlkm_staging_archive.tar.gz
dapat digunakan sebagai input untuk menghasilkansystem_dlkm.img
di platform build.Kirimkan 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) .
Konfigurasikan fitur bawaan kernel sebagai modul GKI
Untuk fitur kernel bawaan yang sudah ada, edit
gki_defconfig
dan setel item konfigurasi fitur kernel yang diperlukan dariy
kem
(=m
). Tetapkan pengaturan ini diarch/arm64/configs/gki_defconfig
danarch/x86/configs/gki_defconfig
.Tambahkan file KO (
.ko
) yang dihasilkan untuk fitur tersebut 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.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_modules
untuk menetapkan modul sebagai modul GKI yang dilindungi. Perbarui daftar ekspor yang dilindungi untuk menyertakan ekspor dari modul yang baru ditambahkan dicommon/android/abi_gki_protected_exports_{ARCH}
menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
. Modul yang ditetapkan sebagai modul GKI yang dilindungi masih harus disetujui oleh Google untuk menjadi modul resmi yang dilindungi.Pastikan file modul KO yang baru dikonversi dari langkah 2 disalin ke
out/<androidX-YZ>/dist/system_dlkm.img
danout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Modul dalam arsipsystem_dlkm_staging_archive.tar.gz
dapat digunakan sebagai input untuk menghasilkansystem_dlkm.img
di platform build.Kirimkan 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) .
Ubah modul GKI yang dilindungi menjadi tidak terlindungi
Hapus modul yang sedang dikonversi dari dilindungi ke tidak dilindungi dari daftar modul yang dilindungi di
common/android/gki_protected_modules
.Perbarui daftar ekspor yang dilindungi untuk mengecualikan ekspor dari modul tidak terlindungi yang baru dikonversi di
common/android/abi_gki_protected_exports_{ARCH}
menggunakantools/bazel run //common:kernel_aarch64_abi_update_protected_exports
untukaarch64
.Kirimkan 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) .
Panduan cepat resolusi pelanggaran simbol modul GKI
Jika modul yang tidak ditandatangani melanggar perlindungan simbol yang diterapkan pada modul GKI, ada dua jenis error yang mungkin terjadi selama pemuatan modul, sehingga mengakibatkan kegagalan.
1. Modul yang tidak ditandatangani menggunakan simbol yang dilindungi
Kesalahan:
module: Protected symbol: some_kernel_function (err -13)
Menyebabkan:
File module.ko
adalah modul vendor yang tidak ditandatangani dan berupaya menyelesaikan simbol yang diekspor modul GKI some_kernel_function
selama pemuatan, tanpa dicantumkan dalam daftar simbol vendor.
Resolusi:
Jika module.ko
bukan modul GKI yang dilindungi, memperbarui daftar simbol akan mengatasi kesalahan dengan menyertakan some_kernel_function
dalam daftar simbol vendor. Alternatifnya, gunakan module.ko
versi GKI.
2. Modul yang tidak ditandatangani mengekspor simbol yang dilindungi
Kesalahan:
module: exports protected symbol some_kernel_function
Menyebabkan:
Modul yang mengekspor some_kernel_function
adalah modul GKI yang dilindungi, dan module.ko
kemungkinan merupakan versi khusus modul tersebut yang tidak ditandatangani. Saat module.ko
mencoba mengekspor some_kernel_function
, yang hanya dapat diekspor oleh modul GKI yang ditandatangani, pemuatan gagal dengan pesan ini.
Resolusi:
Hal ini dapat diperbaiki dengan menggunakan versi GKI dari modul yang mengekspor some_kernel_function
, jika modul yang tidak ditandatangani adalah versi khusus.