Penting untuk mempertahankan antarmuka modul kernel (KMI) yang stabil untuk modul vendor. Kernel GKI dibangun dan dikirim dalam bentuk biner dan modul yang dapat dimuat vendor dibangun di pohon terpisah. Kernel GKI dan modul vendor yang dihasilkan harus berfungsi seolah-olah dibangun bersama.
Umumnya, komunitas Linux tidak menyukai gagasan tentang stabilitas ABI dalam kernel untuk kernel utama. Mengingat toolchain, konfigurasi, dan kernel utama Linux yang terus berkembang, tidak mungkin untuk mempertahankan KMI yang stabil di kernel utama. Namun, KMI yang stabil dapat dipertahankan 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
android14-6.1
,android15-6.6
, atauandroid16-6.12
.- 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 membangun kernel dan modul.
Hanya simbol yang diketahui digunakan oleh modul seperti yang ditentukan dalam daftar simbol yang dipantau stabilitasnya dan dianggap sebagai simbol KMI.
- Akibatnya, modul vendor hanya boleh menggunakan simbol KMI. Batasan ini diterapkan dengan membatalkan pemuatan modul jika simbol non-KMI diperlukan.
Setelah cabang KMI dibekukan, perubahan diizinkan tetapi tidak boleh merusak KMI. Perubahan ini mencakup hal berikut:
- Perubahan konfigurasi
- Perubahan kode kernel
- Perubahan toolchain (termasuk update)
Menggunakan proses build hermetik dan toolchain LLVM
Proses build hermetis memastikan KMI yang stabil dengan memiliki manifes repo
di
kernel/manifest
yang sepenuhnya menjelaskan lingkungan build. Misalnya, manifes untuk android16-6.12
mencakup toolchain, sistem build, dan semua hal lain yang diperlukan untuk mem-build
kernel Generic Kernel Image (GKI). Konfigurasi build, terutama
BUILD.bazel
,
memastikan bahwa alat yang disertakan digunakan dengan benar untuk menghasilkan hasil build yang konsisten.
Menggunakan proses build hermetik juga memastikan bahwa deskripsi ABI untuk hierarki konsisten, baik yang dibuat oleh Google (misalnya, gki/aarch64/abi.stg
untuk android16-6.12
) maupun yang dibuat di hierarki lokal yang menyertakan modul vendor. Alat untuk membuat dan membandingkan deskripsi ABI
untuk Kernel Module Interface (KMI) juga disediakan sebagai bagian dari repo
yang dijelaskan oleh manifes.
Toolchain yang digunakan untuk membangun kernel GKI harus sepenuhnya kompatibel dengan toolchain yang digunakan untuk membangun modul vendor. Mulai Android 10, semua kernel Android harus dibangun dengan toolchain LLVM. Dengan GKI, toolchain LLVM yang digunakan untuk membangun 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 ini memberikan kompatibilitas terbaik.
Apa selanjutnya?
Untuk mengetahui petunjuk tentang cara membangun kernel menggunakan proses build hermetik dan toolchain LLVM, lihat Membangun kernel.
Untuk mengetahui petunjuk tentang cara memantau ABI dan memperbaiki masalah, lihat Pemantauan ABI Kernel Android