Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release
, bukan aosp-main
, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Mempertahankan antarmuka modul kernel yang stabil
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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
tidak menyukai 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 mem-build
kernel.
KMI hanya stabil dalam kernel LTS dan Android versi yang sama,
seperti android14-6.1
, android15-6.6
, atau android16-6.12
.
- 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.
- Akibatnya, 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 mencakup hal berikut:
- 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 android16-6.12
menyertakan toolchain, sistem build, dan semua hal lain yang diperlukan untuk mem-build
kernel Generic Kernel Image (GKI). Konfigurasi build, terutama
BUILD.bazel
,
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,
gki/aarch64/abi.stg
untuk android16-6.12
) maupun yang 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?
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-07-27 UTC."],[],[],null,["# Maintain a stable kernel module interface\n\nIt's critical to maintain a stable kernel module interface (KMI) for vendor\nmodules. The GKI kernel is\nbuilt and shipped in binary form and vendor-loadable modules are built in a\nseparate tree. The resulting GKI kernel and vendor modules must work as\nthough they were built together.\n\nGenerally, the Linux community has\n[frowned on the notion of in-kernel ABI\nstability](https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst)\nfor the mainline kernel. In the face of different toolchains, configurations,\nand an ever-evolving Linux mainline kernel, it isn't feasible to maintain a\nstable KMI in mainline. However, it's possible to maintain a stable KMI in\nthe highly-constrained GKI environment with these constraints:\n\n- Only a single configuration, `gki_defconfig`, can be used to build the\n kernel.\n\n- The KMI is only stable within the same LTS and Android version of a kernel,\n such as `android14-6.1`, `android15-6.6` or `android16-6.12`.\n\n - No KMI stability is maintained for `android-mainline`.\n- Only the specific *Clang* toolchain supplied in AOSP and defined for the\n corresponding branch is used for building kernel and modules.\n\n- Only symbols known to be used by modules as specified in a symbol list are\n monitored for stability and considered KMI symbols.\n\n - The corollary is that vendor modules must use only KMI symbols. This constraint is enforced by failing module loads if non-KMI-symbols are required.\n- After the KMI branch is frozen, changes are allowed but can't break the KMI.\n These changes include the following:\n\n - Config changes\n - Kernel code changes\n - Toolchain changes (including updates)\n\nUse the hermetic build process and LLVM toolchain\n-------------------------------------------------\n\nThe hermetic build process ensures a stable KMI by having `repo` manifests in\n`kernel/manifest` completely describe the build environment. For example, the\n[manifest for `android16-6.12`](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android16-6.12/default.xml)\nincludes the toolchain, build system, and everything else required to build the\nGeneric Kernel Image (GKI) kernel. The build configuration, primarily\n[`BUILD.bazel`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/BUILD.bazel),\nensures that the included tools are used correctly to generate consistent build\nresults.\n\nUsing a hermetic build process also ensures that the ABI description for the\ntree is consistent whether generated by Google (for example,\n[`gki/aarch64/abi.stg`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/abi.stg)\nfor `android16-6.12`) or generated in a local tree that includes the vendor\nmodules. The\n[tools to create and compare the ABI description](https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/)\nfor the Kernel Module Interface (KMI) are also provided as part of the repo\ndescribed by the manifest.\n\nThe toolchain used to build the GKI kernel must be completely compatible with\nthe toolchain used to build vendor modules. As of Android\n10, all Android kernels must be built\nwith an LLVM toolchain. With GKI, the LLVM toolchain used to build product\nkernels and vendor modules must generate the same ABI as the LLVM toolchain from\nAOSP and partners must ensure that the KMI is compatible with the GKI kernel.\nUsing the provided build tools is strongly encouraged as they provide the\nbest compatibility.\n\nWhat's next?\n------------\n\n- For instructions on building the kernel using the hermetic build process and\n LLVM toolchain, refer to refer to\n [Build kernels](/docs/setup/build/building-kernels).\n\n- For instructions on how to monitor the ABI and fix issues, refer to\n [Android Kernel ABI Monitoring](/docs/core/architecture/kernel/abi-monitor)"]]