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 oleh vendor dibuat dalam struktur terpisah. Kernel GKI dan modul vendor yang dihasilkan harus bekerja seolah-olah mereka dibangun bersama.

Umumnya, komunitas Linux tidak menyukai gagasan stabilitas ABI di dalam kernel untuk kernel arus utama. Dalam menghadapi berbagai toolchain, konfigurasi, dan kernel arus utama Linux yang terus berkembang, mempertahankan KMI yang stabil di saluran utama tidak mungkin dilakukan. Namun, dimungkinkan untuk 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 versi kernel 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 khusus 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 diberlakukan dengan gagal memuat modul jika simbol non-KMI diperlukan.
  • Setelah cabang KMI dibekukan, perubahan diperbolehkan tetapi tidak dapat merusak KMI. Perubahan tersebut antara lain sebagai berikut:

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

Gunakan proses pembuatan kedap udara dan rantai alat LLVM

Proses build hermetis memastikan KMI yang stabil dengan memanifestasikan repo di kernel/manifest yang sepenuhnya menggambarkan lingkungan build. Misalnya, manifes untuk android13-5.15 menyertakan toolchain, skrip build, dan semua hal lain yang diperlukan untuk membangun kernel Generic Kernel Image (GKI). Masing-masing file konfigurasi build.config , seperti GKI build config 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 pohon konsisten baik yang dihasilkan 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 Antarmuka Modul Kernel (KMI) juga disediakan sebagai bagian dari repo yang dijelaskan oleh manifes.

Rantai alat yang digunakan untuk membangun kernel GKI harus sepenuhnya kompatibel dengan rantai alat yang digunakan untuk membangun modul vendor. Mulai Android 10, semua kernel Android harus dibuat dengan toolchain LLVM. Dengan GKI, rantai alat LLVM yang digunakan untuk membangun kernel produk dan modul vendor harus menghasilkan ABI yang sama dengan rantai alat LLVM dari AOSP dan mitra harus memastikan bahwa KMI kompatibel dengan kernel GKI. Menggunakan alat build yang disediakan sangat dianjurkan karena mereka memberikan jaminan kompatibilitas.

Apa berikutnya?

  • Untuk instruksi tentang membangun kernel menggunakan proses build hermetis dan toolchain LLVM, lihat referensi Build kernels .

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