حفظ یک رابط ماژول هسته (KMI) پایدار برای ماژول های فروشنده بسیار مهم است. هسته GKI به شکل باینری ساخته و ارسال می شود و ماژول های قابل بارگذاری توسط فروشنده در یک درخت جداگانه ساخته می شوند. هسته GKI و ماژولهای فروشنده باید طوری کار کنند که انگار با هم ساخته شدهاند.
به طور کلی، جامعه لینوکس با مفهوم پایداری ABI درون هسته برای هسته اصلی مخالف است . در مواجهه با زنجیرههای ابزار مختلف، پیکربندیها و هسته خط اصلی لینوکس که همیشه در حال تکامل است، حفظ KMI پایدار در خط اصلی امکانپذیر نیست. با این حال، حفظ KMI پایدار در محیط GKI بسیار محدود با این محدودیتها ممکن است:
فقط از یک پیکربندی،
gki_defconfig
، می توان برای ساخت هسته استفاده کرد.KMI فقط در همان نسخه LTS و Android یک هسته، مانند
android13-5.10
،android12-5.10
یاandroid13-5.15
پایدار است.- هیچ ثبات KMI برای
android-mainline
حفظ نمی شود.
- هیچ ثبات KMI برای
فقط زنجیره ابزار Clang خاص ارائه شده در AOSP و تعریف شده برای شاخه مربوطه برای ساخت هسته و ماژول ها استفاده می شود.
فقط نمادهایی که توسط ماژولها استفاده میشوند، همانطور که در فهرست نمادها مشخص شدهاند، از نظر پایداری نظارت میشوند و نمادهای KMI در نظر گرفته میشوند.
- نتیجه این است که ماژول های فروشنده باید فقط از نمادهای KMI استفاده کنند. اگر به نمادهای غیر KMI نیاز باشد، این محدودیت با بارگذاری ماژولهای ناموفق اعمال میشود.
پس از مسدود شدن شاخه KMI، تغییرات مجاز هستند اما نمیتوانند KMI را خراب کنند. این تغییرات شامل موارد زیر است:
- پیکربندی تغییر می کند
- کد کرنل تغییر می کند
- تغییرات زنجیره ابزار (از جمله به روز رسانی)
از فرآیند ساخت هرمتیک و زنجیره ابزار LLVM استفاده کنید
فرآیند ساخت هرمتیک با داشتن مانیفست های repo
در kernel/manifest
که به طور کامل محیط ساخت را توصیف می کند، KMI پایدار را تضمین می کند. به عنوان مثال، مانیفست برای android13-5.15
شامل زنجیره ابزار، اسکریپت های ساخت و هر چیز دیگری که برای ساختن هسته تصویر هسته عمومی (GKI) نیاز است، می باشد. فایلهای پیکربندی build.config
مربوطه، مانند پیکربندی ساخت GKI build.config.gki.aarch64
، اطمینان حاصل میکنند که ابزارهای ارائهشده به درستی برای ایجاد نتایج ساخت یکسان استفاده میشوند.
استفاده از فرآیند ساخت هرمتیک همچنین تضمین میکند که توضیحات ABI برای درخت، چه توسط Google ایجاد شده باشد (به عنوان مثال، abi_gki_aarch64.xml
برای android13-5.15
) یا در یک درخت محلی که شامل ماژولهای فروشنده است، سازگار باشد. ابزارهای ایجاد و مقایسه توضیحات ABI برای رابط ماژول هسته (KMI) نیز به عنوان بخشی از مخزن توصیف شده توسط مانیفست ارائه شده است.
زنجیره ابزار مورد استفاده برای ساخت هسته GKI باید کاملاً با زنجیره ابزار مورد استفاده برای ساخت ماژول های فروشنده سازگار باشد. از اندروید 10، تمام هسته های اندروید باید با زنجیره ابزار LLVM ساخته شوند. با GKI، زنجیره ابزار LLVM که برای ساخت هستههای محصول و ماژولهای فروشنده استفاده میشود، باید همان ABI را با زنجیره ابزار LLVM از AOSP ایجاد کند و شرکا باید اطمینان حاصل کنند که KMI با هسته GKI سازگار است. استفاده از ابزارهای ساخت ارائه شده به شدت تشویق می شود زیرا آنها بهترین سازگاری را ارائه می دهند.
بعدش چی؟
برای دستورالعملهای ساخت هسته با استفاده از فرآیند ساخت هرمتیک و زنجیره ابزار LLVM، به ساخت هستهها مراجعه کنید.
برای راهنمایی در مورد نحوه نظارت بر ABI و رفع مشکلات، به مانیتورینگ ABI Kernel Android مراجعه کنید