27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Kararlı bir çekirdek modülü arayüzü sürdürme
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Tedarikçi modülleri için kararlı bir çekirdek modülü arayüzü (KMI) sürdürmek çok önemlidir. GKI çekirdeği ikili biçimde derlenip gönderilir ve tedarikçi firma tarafından yüklenebilecek modüller ayrı bir ağaçta oluşturulur. Ortaya çıkan GKI çekirdeği ve tedarikçi modülleri, birlikte oluşturulmuş gibi çalışmalıdır.
Genel olarak Linux topluluğu, ana hat çekirdeği için çekirdek içi ABI kararlılığı fikrine karşı çıkmıştır. Farklı araç zincirleri, yapılandırmalar ve sürekli gelişen bir Linux ana hat çekirdeği karşısında, ana hatta kararlı bir KMI sürdürmek mümkün değildir. Ancak, aşağıdaki kısıtlamalarla birlikte yüksek düzeyde kısıtlanmış GKI ortamında kararlı bir KMI elde etmek mümkündür:
Çekirdek oluşturmak için yalnızca tek bir yapılandırma (gki_defconfig
) kullanılabilir.
KMI yalnızca bir çekirdeğin aynı LTS ve Android sürümünde (ör. android14-6.1
, android15-6.6
veya android16-6.12
) kararlıdır.
android-mainline
için KMI kararlılığı sağlanmıyor.
Çekirdek ve modülleri derlemek için yalnızca AOSP'de sağlanan ve ilgili dal için tanımlanan belirli Clang araç zinciri kullanılır.
Yalnızca bir simge listesinde belirtildiği şekilde modüller tarafından kullanıldığı bilinen simgeler kararlılık açısından izlenir ve KMI simgesi olarak kabul edilir.
- Sonuç olarak, tedarikçi modüllerinde yalnızca KMI sembolleri kullanılmalıdır. KMI dışındaki semboller gerekiyorsa bu kısıtlama, modül yüklemelerinin başarısız olmasıyla uygulanır.
KMI şubesi dondurulduktan sonra değişikliklere izin verilir ancak KMI'yı bozamaz.
Bu değişiklikler şunlardır:
- Yapılandırma değişiklikleri
- Çekirdek kodu değişiklikleri
- Araç zinciri değişiklikleri (güncellemeler dahil)
Hermetik derleme işlemini ve LLVM araç zincirini kullanma
Hermetik derleme süreci, kernel/manifest
içindeki repo
manifestlerinin derleme ortamını tamamen tanımlamasını sağlayarak kararlı bir KMI sağlar. Örneğin, android16-6.12
için manifest, araç zincirini, derleme sistemini ve Genel Çekirdek Görüntüsü (GKI) çekirdeğini oluşturmak için gereken her şeyi içerir. Derleme yapılandırması (özellikle BUILD.bazel
), dahil edilen araçların tutarlı derleme sonuçları oluşturmak için doğru şekilde kullanılmasını sağlar.
Hermetik bir derleme süreci kullanmak, ağacın ABI açıklamasının Google tarafından (ör. android16-6.12
için gki/aarch64/abi.stg
) oluşturulup oluşturulmadığına bakılmaksızın tutarlı olmasını sağlar veya tedarikçi modüllerini içeren yerel bir ağaçta oluşturulur. Manifest tarafından açıklanan deponun bir parçası olarak, çekirdek modülü arayüzü (KMI) için ABI açıklamasını oluşturmak ve karşılaştırmak üzere kullanılan araçlar da sağlanır.
GKI çekirdeğini oluşturmak için kullanılan araç zinciri, tedarikçi modüllerini oluşturmak için kullanılan araç zinciriyle tamamen uyumlu olmalıdır. Android 10'dan itibaren tüm Android çekirdekleri LLVM araç setiyle derlenmelidir. GKI ile ürün çekirdeklerini ve tedarikçi modüllerini oluşturmak için kullanılan LLVM araç zinciri, AOSP'deki LLVM araç zinciriyle aynı ABI'yi oluşturmalıdır. İş ortakları da KMI'nin GKI çekirdeğiyle uyumlu olduğundan emin olmalıdır.
En iyi uyumluluğu sağladıkları için sağlanan derleme araçlarının kullanılması önemle tavsiye edilir.
Sırada ne var?
Hermetik derleme işlemini ve LLVM araç setini kullanarak çekirdeği derlemeyle ilgili talimatlar için Çekirdek derleme başlıklı makaleyi inceleyin.
ABI'yi izleme ve sorunları düzeltmeyle ilgili talimatlar için Android Çekirdek ABI İzleme başlıklı makaleyi inceleyin.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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)"]]