Mengonfigurasi fitur kernel sebagai modul GKI

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

  1. Untuk fitur baru, edit gki_defconfig dan tetapkan item konfigurasi fitur kernel yang diperlukan dari n ke m (=m). Tetapkan setelan ini di arch/arm64/configs/gki_defconfig dan arch/x86/configs/gki_defconfig.

  2. Tambahkan file KO (.ko) yang dihasilkan untuk fitur ke bagian COMMON_GKI_MODULES_LIST di common/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.

  3. 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 menentukan modul sebagai modul GKI yang dilindungi. Perbarui daftar ekspor yang dilindungi untuk menyertakan ekspor dari modul yang baru ditambahkan di common/android/abi_gki_protected_exports_{ARCH} menggunakan tools/bazel run //common:kernel_aarch64_abi_update_protected_exports untuk aarch64. Modul yang ditetapkan sebagai modul GKI yang dilindungi masih harus disetujui oleh Google agar menjadi modul resmi yang dilindungi.

  4. Pastikan file KO yang baru ditambahkan dari langkah 2 disalin ke out/<androidX-Y.Z>/dist/system_dlkm.img dan out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz kernel. Modul dalam arsip system_dlkm_staging_archive.tar.gz dapat digunakan sebagai input untuk membuat system_dlkm.img dalam build platform.

  5. Kirim perubahan Anda untuk ditinjau. Modul GKI adalah fitur kernel khusus Android, sehingga patch konversi modul tidak perlu dikirimkan upstream. Namun, Anda harus mengikuti panduan lain untuk mengirimkan patch Android Common Kernel (ACK).

Mengonfigurasi fitur bawaan kernel sebagai modul GKI

  1. Untuk fitur kernel bawaan yang ada, edit gki_defconfig dan tetapkan item konfigurasi fitur kernel yang diperlukan dari y ke m (=m). Tetapkan setelan ini di arch/arm64/configs/gki_defconfig dan arch/x86/configs/gki_defconfig.

  2. Tambahkan file KO (.ko) yang dibuat untuk fitur ke bagian COMMON_GKI_MODULES_LIST di common/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.

  3. 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. Perbarui daftar ekspor yang dilindungi untuk menyertakan ekspor dari modul yang baru ditambahkan di common/android/abi_gki_protected_exports_{ARCH} menggunakan tools/bazel run //common:kernel_aarch64_abi_update_protected_exports untuk aarch64. Modul yang ditetapkan sebagai modul GKI yang dilindungi masih harus disetujui oleh Google agar menjadi modul resmi yang dilindungi.

  4. Pastikan file KO modul yang baru dikonversi dari langkah 2 disalin ke out/<androidX-Y.Z>/dist/system_dlkm.img dan out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz kernel. Modul dalam arsip system_dlkm_staging_archive.tar.gz dapat digunakan sebagai input untuk membuat system_dlkm.img dalam build platform.

  5. Kirim perubahan 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).

Mengonversi modul GKI yang dilindungi menjadi tidak dilindungi

  1. Hapus modul yang dikonversi dari dilindungi menjadi tidak dilindungi dari daftar modul yang dilindungi di common/android/gki_protected_modules.

  2. Perbarui daftar ekspor yang dilindungi untuk mengecualikan ekspor dari modul yang baru dikonversi dan tidak dilindungi di common/android/abi_gki_protected_exports_{ARCH} menggunakan tools/bazel run //common:kernel_aarch64_abi_update_protected_exports untuk aarch64.

  3. Kirim perubahan untuk ditinjau. Modul GKI adalah fitur kernel khusus Android, sehingga patch konversi modul tidak perlu dikirimkan upstream. Namun, Anda harus mengikuti panduan lain untuk mengirimkan patch Android Common Kernel (ACK).

Panduan cepat 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, yang mengakibatkan 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 me-resolve simbol some_kernel_function yang diekspor modul GKI 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 module.ko versi GKI.

2. Modul yang tidak ditandatangani yang 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 modul yang mengekspor some_kernel_function, jika modul yang tidak ditandatangani adalah versi kustom.