Pertahankan Antarmuka Modul Kernel (KMI) yang stabil

Sangat penting untuk mempertahankan KMI yang stabil untuk modul vendor. Kernel GKI dibuat dan dikirimkan dalam bentuk biner dan modul yang dapat dimuat vendor dibuat di pohon terpisah. Modul kernel dan vendor GKI yang dihasilkan harus berfungsi seolah-olah dibuat bersama.

Secara umum, komunitas Linux tidak menyukai gagasan stabilitas ABI dalam kernel untuk kernel jalur utama. Menghadapi rantai alat, konfigurasi, dan kernel jalur utama Linux yang terus berkembang, tidak mungkin mempertahankan KMI yang stabil di jalur utama. Namun, KMI dapat dipertahankan stabil di lingkungan GKI yang sangat terbatas dengan batasan berikut:

  • Hanya satu konfigurasi, gki_defconfig , yang dapat digunakan untuk membangun kernel.

  • KMI hanya stabil dalam kernel versi LTS dan Android yang sama, seperti android13-5.10 , android12-5.10 atau android13-5.15 .

    • Tidak ada stabilitas KMI yang dipertahankan untuk android-mainline .
  • Hanya rantai alat Clang spesifik yang disediakan di AOSP dan ditentukan untuk cabang terkait yang digunakan untuk membangun kernel dan modul.

  • Hanya simbol yang diketahui digunakan oleh modul sebagaimana ditentukan dalam daftar simbol yang dipantau stabilitasnya 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 diperbolehkan namun tidak boleh merusak KMI. Perubahan tersebut antara lain sebagai berikut:

    • Perubahan konfigurasi
    • Perubahan kode kernel
    • Perubahan rantai alat (termasuk pembaruan)

Gunakan proses pembangunan kedap udara dan rantai alat LLVM

Proses pembangunan yang kedap udara memastikan KMI yang stabil dengan membuat manifes repo di kernel/manifest menggambarkan lingkungan pembangunan secara lengkap. Misalnya, manifes untuk android13-5.15 mencakup toolchain, skrip build, dan semua hal lain yang diperlukan untuk membuat kernel Generic Kernel Image (GKI). File konfigurasi build.config terkait, seperti konfigurasi build GKI build.config.gki.aarch64 , memastikan bahwa alat yang disertakan digunakan dengan benar untuk menghasilkan hasil build yang konsisten.

Penggunaan proses build yang kedap udara juga memastikan bahwa deskripsi ABI untuk pohon tersebut konsisten baik yang dibuat oleh Google (misalnya, abi_gki_aarch64.xml untuk android13-5.15 atau dibuat di pohon 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 membuat kernel GKI harus sepenuhnya kompatibel dengan toolchain yang digunakan untuk membuat modul vendor. Mulai Android 10, semua kernel Android harus dibuat 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. Sangat disarankan untuk menggunakan alat build yang disediakan karena memberikan jaminan kompatibilitas.

Apa berikutnya?

  • Untuk petunjuk tentang cara membangun kernel menggunakan proses pembangunan hermetis dan rantai alat LLVM, lihat Build kernels .

  • Untuk petunjuk tentang cara memantau ABI dan memperbaiki masalah, lihat Pemantauan ABI Kernel Android