Mempertahankan Kernel Module Interface (KMI) yang stabil

Sangat penting untuk mempertahankan KMI yang stabil untuk modul vendor. Kernel GKI adalah dibangun dan dikirim dalam bentuk biner dan modul yang dapat dimuat oleh vendor dibangun di dalam pohon yang terpisah. Kernel GKI yang dihasilkan dan modul vendor harus berfungsi sebagai meskipun mereka dibuat bersama-sama.

Secara umum, komunitas Linux memiliki tidak setuju dengan gagasan stabilitas ABI dalam kernel untuk {i>kernel<i} mainline. Dalam menghadapi beragam toolchain, konfigurasi, dan {i>kernel<i} Linux yang terus berkembang, tidak mungkin untuk memelihara KMI stabil di saluran utama. Namun, ada kemungkinan untuk mempertahankan KMI yang stabil di lingkungan GKI yang sangat terbatas dengan kendala berikut:

  • Hanya satu konfigurasi, gki_defconfig, yang dapat digunakan untuk membuat {i>kernel<i}.

  • 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 toolchain Clang tertentu yang disediakan di AOSP dan ditetapkan untuk cabang yang sesuai digunakan untuk membangun {i>kernel<i} dan modul.

  • Hanya simbol yang diketahui digunakan oleh modul sebagaimana ditentukan dalam daftar simbol dimonitor untuk stabilitas dan dianggap sebagai simbol KMI.

    • Konsekuensinya adalah modul vendor hanya boleh menggunakan simbol KMI. Ini dibatasi oleh pemuatan modul yang gagal jika simbol non-KMI tidak 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 hermetic dan toolchain LLVM

Proses build hermetic memastikan KMI yang stabil dengan memiliki manifes repo di kernel/manifest mendeskripsikan lingkungan build sepenuhnya. Misalnya, manifes untuk android13-5.15 mencakup toolchain, skrip build, dan hal lain yang diperlukan untuk membuat {i>Generic Kernel Image<i} (GKI) {i>kernel<i}. Konfigurasi build.config masing-masing seperti konfigurasi build GKI build.config.gki.aarch64, memastikan bahwa alat yang disertakan digunakan dengan benar untuk menghasilkan build yang konsisten hasil pengujian tersebut.

Menggunakan proses build hermetic juga memastikan bahwa deskripsi ABI untuk yang konsisten baik yang dibuat oleh Google (misalnya, abi_gki_aarch64.xml untuk android13-5.15) atau dihasilkan di hierarki lokal yang menyertakan vendor modul. Tujuan alat untuk membuat dan membandingkan deskripsi ABI untuk Kernel Module Interface (KMI) juga disediakan sebagai bagian dari yang dijelaskan oleh manifes.

Toolchain yang digunakan untuk membangun kernel GKI harus sepenuhnya kompatibel dengan toolchain yang digunakan untuk membangun modul vendor. Mulai dari Android 10, semua kernel Android harus dibangun dengan toolchain LLVM. Dengan GKI, toolchain LLVM digunakan untuk membangun produk kernel 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 menyediakan jaminan kompatibilitas.

Apa selanjutnya?

  • Untuk instruksi tentang membangun {i>kernel<i} menggunakan proses {i>hermetic build<i} dan LLVM, lihat Build kernel.

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