از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
یک رابط ماژول هسته پایدار را حفظ کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
حفظ یک رابط ماژول هسته (KMI) پایدار برای ماژول های فروشنده بسیار مهم است. هسته GKI به شکل باینری ساخته و ارسال می شود و ماژول های قابل بارگذاری توسط فروشنده در یک درخت جداگانه ساخته می شوند. هسته GKI و ماژولهای فروشنده باید طوری کار کنند که انگار با هم ساخته شدهاند.
به طور کلی، جامعه لینوکس با مفهوم پایداری ABI درون هسته برای هسته اصلی مخالف است. در مواجهه با زنجیرههای ابزار مختلف، پیکربندیها و هسته خط اصلی لینوکس که همیشه در حال تکامل است، حفظ KMI پایدار در خط اصلی امکانپذیر نیست. با این حال، حفظ KMI پایدار در محیط GKI بسیار محدود با این محدودیتها ممکن است:
فقط از یک پیکربندی، gki_defconfig
، می توان برای ساخت هسته استفاده کرد.
KMI فقط در همان نسخه LTS و Android یک هسته، مانند android14-6.1
، android15-6.6
یا android16-6.12
پایدار است.
- هیچ ثبات KMI برای
android-mainline
حفظ نمی شود.
فقط زنجیره ابزار Clang خاص ارائه شده در AOSP و تعریف شده برای شاخه مربوطه برای ساخت هسته و ماژول ها استفاده می شود.
فقط نمادهایی که توسط ماژولها استفاده میشوند، همانطور که در فهرست نمادها مشخص شدهاند، از نظر پایداری نظارت میشوند و نمادهای KMI در نظر گرفته میشوند.
- نتیجه این است که ماژول های فروشنده باید فقط از نمادهای KMI استفاده کنند. اگر به نمادهای غیر KMI نیاز باشد، این محدودیت با بارگذاری ماژولهای ناموفق اعمال میشود.
پس از مسدود شدن شاخه KMI، تغییرات مجاز هستند اما نمیتوانند KMI را خراب کنند. این تغییرات شامل موارد زیر است:
- پیکربندی تغییر می کند
- کد کرنل تغییر می کند
- تغییرات زنجیره ابزار (از جمله به روز رسانی)
از فرآیند ساخت هرمتیک و زنجیره ابزار LLVM استفاده کنید
فرآیند ساخت هرمتیک با داشتن مانیفست های repo
در kernel/manifest
به طور کامل محیط ساخت را توصیف می کند، KMI پایدار را تضمین می کند. به عنوان مثال، مانیفست برای android16-6.12
شامل زنجیره ابزار، سیستم ساخت و هر چیز دیگری که برای ساختن هسته تصویر هسته عمومی (GKI) نیاز است، است. پیکربندی ساخت، در درجه اول BUILD.bazel
، تضمین می کند که ابزارهای ارائه شده به درستی برای ایجاد نتایج ساخت منسجم استفاده می شوند.
استفاده از فرآیند ساخت هرمتیک همچنین تضمین میکند که توضیحات ABI برای درخت، چه توسط Google ایجاد شده باشد (به عنوان مثال، gki/aarch64/abi.stg
برای android16-6.12
) یا در یک درخت محلی که شامل ماژولهای فروشنده است، سازگار باشد. ابزارهای ایجاد و مقایسه توضیحات ABI برای رابط ماژول هسته (KMI) نیز به عنوان بخشی از مخزن توصیف شده توسط مانیفست ارائه شده است.
زنجیره ابزار مورد استفاده برای ساخت هسته GKI باید کاملاً با زنجیره ابزار مورد استفاده برای ساخت ماژول های فروشنده سازگار باشد. از اندروید 10، تمام هسته های اندروید باید با زنجیره ابزار LLVM ساخته شوند. با GKI، زنجیره ابزار LLVM که برای ساخت هستههای محصول و ماژولهای فروشنده استفاده میشود، باید همان ABI را با زنجیره ابزار LLVM از AOSP ایجاد کند و شرکا باید اطمینان حاصل کنند که KMI با هسته GKI سازگار است. استفاده از ابزارهای ساخت ارائه شده به شدت تشویق می شود زیرا آنها بهترین سازگاری را ارائه می دهند.
بعدش چی؟
برای دستورالعملهای ساخت هسته با استفاده از فرآیند ساخت هرمتیک و زنجیره ابزار LLVM، به ساخت هستهها مراجعه کنید.
برای راهنمایی در مورد نحوه نظارت بر ABI و رفع مشکلات، به مانیتورینگ ABI Kernel Android مراجعه کنید
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)"]]