Sangat penting untuk mempertahankan antarmuka modul kernel (KMI) yang stabil untuk modul vendor. Kernel GKI di-build dan dikirim dalam bentuk biner dan modul yang dapat dimuat vendor di-build dalam hierarki terpisah. Kernel GKI dan modul vendor yang dihasilkan harus berfungsi seolah-olah di-build bersama.
Secara umum, komunitas Linux telah menolak gagasan stabilitas ABI dalam kernel untuk kernel utama. Dengan berbagai toolchain, konfigurasi, dan kernel mainline Linux yang terus berkembang, tidak mungkin untuk mempertahankan KMI yang stabil di mainline. Namun, Anda dapat mempertahankan KMI yang stabil di lingkungan GKI yang sangat dibatasi dengan batasan berikut:
Hanya satu konfigurasi,
gki_defconfig
, yang dapat digunakan untuk membangun kernel.KMI hanya stabil dalam LTS dan versi Android kernel yang sama, seperti
android13-5.10
,android12-5.10
, atauandroid13-5.15
.- Tidak ada stabilitas KMI yang dipertahankan untuk
android-mainline
.
- Tidak ada stabilitas KMI yang dipertahankan untuk
Hanya toolchain Clang tertentu yang disediakan di AOSP dan ditentukan untuk cabang yang sesuai yang digunakan untuk mem-build kernel dan modul.
Hanya simbol yang diketahui digunakan oleh modul seperti yang ditentukan dalam daftar simbol yang dipantau untuk stabilitas dan dianggap sebagai simbol KMI.
- Konsekuensinya adalah modul vendor hanya boleh menggunakan simbol KMI. Batasan ini diterapkan dengan gagal memuat modul jika simbol non-KMI diperlukan.
Setelah cabang KMI dibekukan, perubahan diizinkan tetapi tidak dapat merusak KMI. Perubahan ini meliputi:
- Perubahan konfigurasi
- Perubahan kode kernel
- Perubahan toolchain (termasuk update)
Menggunakan proses build hermetis dan toolchain LLVM
Proses build hermetis memastikan KMI yang stabil dengan membuat manifes repo
di
kernel/manifest
yang sepenuhnya menjelaskan lingkungan build. Misalnya, manifes untuk android13-5.15
menyertakan toolchain, skrip build, dan semua hal lain yang diperlukan untuk mem-build
kernel Generic Kernel Image (GKI). File konfigurasi build.config
masing-masing, seperti konfigurasi build GKI build.config.gki.aarch64
,
memastikan bahwa alat yang disertakan digunakan dengan benar untuk menghasilkan hasil build
yang konsisten.
Menggunakan proses build hermetis juga memastikan bahwa deskripsi ABI untuk
hierarki konsisten, baik yang dihasilkan oleh Google (misalnya,
abi_gki_aarch64.xml
untuk android13-5.15
) atau dihasilkan dalam hierarki lokal yang menyertakan modul
vendor. Alat untuk membuat dan membandingkan deskripsi ABI
untuk Antarmuka Modul Kernel (KMI) juga disediakan sebagai bagian dari repo
yang dijelaskan oleh manifes.
Toolchain yang digunakan untuk mem-build kernel GKI harus sepenuhnya kompatibel dengan toolchain yang digunakan untuk mem-build modul vendor. Mulai Android 10, semua kernel Android harus di-build dengan toolchain LLVM. Dengan GKI, toolchain LLVM yang digunakan untuk mem-build kernel produk dan modul vendor harus menghasilkan ABI yang sama dengan toolchain LLVM dari AOSP dan partner harus memastikan bahwa KMI kompatibel dengan kernel GKI. Penggunaan alat build yang disediakan sangat dianjurkan karena alat tersebut memberikan kompatibilitas terbaik.
Apa selanjutnya?
Untuk mengetahui petunjuk cara mem-build kernel menggunakan proses build hermetic dan toolchain LLVM, lihat Membangun kernel.
Untuk mendapatkan petunjuk tentang cara memantau ABI dan memperbaiki masalah, lihat Pemantauan ABI Kernel Android