یک رابط ماژول هسته پایدار را حفظ کنید

حفظ یک رابط ماژول هسته (KMI) پایدار برای ماژول‌های فروشنده بسیار مهم است. هسته GKI به صورت دودویی ساخته و ارسال می‌شود و ماژول‌های قابل بارگذاری توسط فروشنده در یک درخت جداگانه ساخته می‌شوند. هسته GKI حاصل و ماژول‌های فروشنده باید طوری کار کنند که گویی با هم ساخته شده‌اند.

به طور کلی، جامعه لینوکس از مفهوم پایداری ABI درون هسته برای هسته اصلی استقبال نکرده است. با توجه به زنجیره ابزارها، پیکربندی‌ها و هسته اصلی لینوکس که دائماً در حال تکامل است، حفظ یک KMI پایدار در هسته اصلی امکان‌پذیر نیست. با این حال، حفظ یک KMI پایدار در محیط GKI با محدودیت‌های بسیار زیاد و با این محدودیت‌ها امکان‌پذیر است:

  • فقط یک پیکربندی واحد، gki_defconfig ، می‌تواند برای ساخت هسته استفاده شود.

  • KMI فقط در نسخه‌های LTS و اندروید یکسان از یک هسته، مانند 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 شامل زنجیره ابزار، سیستم ساخت و هر چیز دیگری است که برای ساخت هسته Generic Kernel Image (GKI) مورد نیاز است. پیکربندی ساخت، در درجه اول BUILD.bazel ، تضمین می‌کند که ابزارهای موجود به درستی برای تولید نتایج ساخت سازگار استفاده می‌شوند.

Using a hermetic build process also ensures that the ABI description for the tree is consistent whether generated by Google (for example, gki/aarch64/abi.stg for android16-6.12 ) or generated in a local tree that includes the vendor modules. The tools to create and compare the ABI description for the Kernel Module Interface (KMI) are also provided as part of the repo described by the manifest.

زنجیره ابزار مورد استفاده برای ساخت هسته GKI باید کاملاً با زنجیره ابزار مورد استفاده برای ساخت ماژول‌های فروشنده سازگار باشد. از اندروید ۱۰، تمام هسته‌های اندروید باید با زنجیره ابزار LLVM ساخته شوند. با GKI، زنجیره ابزار LLVM مورد استفاده برای ساخت هسته‌های محصول و ماژول‌های فروشنده باید همان ABI را تولید کند که زنجیره ابزار LLVM از AOSP تولید می‌کند و شرکا باید اطمینان حاصل کنند که KMI با هسته GKI سازگار است. استفاده از ابزارهای ساخت ارائه شده اکیداً توصیه می‌شود زیرا بهترین سازگاری را ارائه می‌دهند.

بعدش چی؟

  • برای دستورالعمل‌های ساخت هسته با استفاده از فرآیند ساخت هرمتیک و زنجیره ابزار LLVM، به بخش «ساخت هسته‌ها» مراجعه کنید.

  • برای دستورالعمل‌های مربوط به نحوه نظارت بر ABI و رفع مشکلات، به نظارت بر ABI هسته اندروید مراجعه کنید.