حفظ رابط واحد هسته پایدار

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

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

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

  • «میانای ماژول هسته» فقط در یک نسخه 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 باید کاملاً با زنجیره ابزار استفاده‌شده برای ساخت ماژول‌های فروشنده سازگار باشد. از Android 10، همه هسته‌های Android باید با زنجیره ابزار LLVM ساخته شوند. با GKI، زنجیره ابزار LLVM که برای ساختن هسته‌های محصول و واحدهای فروشنده استفاده می‌شود باید همان ABI را به‌عنوان زنجیره ابزار LLVM از AOSP تولید کند و شرکا باید مطمئن شوند که KMI با هسته GKI سازگار است. استفاده از ابزارهای ساخت ارائه‌شده اکیداً توصیه می‌شود زیرا بهترین سازگاری را ارائه می‌دهند.

حالا چه می‌شود؟

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

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