Sangat penting untuk memelihara antarmuka modul {i>kernel<i} (KMI) yang stabil untuk vendor modul. Kernel GKI merupakan 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 dibuat bersama-sama.
Secara umum, komunitas Linux memiliki tidak setuju dengan gagasan ABI dalam kernel stabilitas 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
, atauandroid13-5.15
.- 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 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 kompatibilitas terbaik.
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