Mempertahankan antarmuka modul kernel yang stabil

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, atau android13-5.15.

    • Tidak ada stabilitas KMI yang dipertahankan untuk android-mainline.
  • 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