من المهم الحفاظ على واجهة وحدة نواة ثابتة (KMI) لوحدات المورّدين. يتم إنشاء نواة GKI وشحنها في شكل ثنائي بينما يتم إنشاء الوحدات القابلة للتحميل من قِبل المورّد في شجرة منفصلة. يجب أن تعمل نواة GKI ووحدات المورّدين الناتجة كما ينطبق على أنّها تم إنشاؤها معًا.
بشكل عام، كان منتدى Linux يرفض فكرة ثبات ABI داخل kernel لنظام التشغيل الرئيسي. في ظلّ سلاسل الأدوات والإعدادات المختلفة، ونظام التشغيل Linux الأساسي المتغيّر باستمرار، ليس من الممكن الحفاظ على مجموعة أدوات 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
تضمن عملية الإنشاء المحكم ثباتًا في نموذج KMI من خلال توفير repo
ملفات بيان في
kernel/manifest
تصف بيئة الإنشاء بالكامل. على سبيل المثال، يحتوي
بيان android13-5.15
على سلسلة الأدوات والنصوص البرمجية للإنشاء وكل ما هو مطلوب لإنشاء ملف التمهيد
Generic Kernel Image (GKI). ملفّات إعدادات build.config
المعنيّة، مثل ملف إعدادات إنشاء GKI build.config.gki.aarch64
،
تؤكّد من استخدام الأدوات المضمّنة بشكلٍ صحيح لإنشاء
نتائج إنشاء متّسقة.
يضمن استخدام عملية الإنشاء المحكم أيضًا أنّ وصف ABI للملف
المدرَج في الشجرة يكون متسقًا سواء أنشأته Google (على سبيل المثال،
abi_gki_aarch64.xml
لـ android13-5.15
) أو أنشأته في شجرة محلية تتضمّن ملف
الوحدات الخاصة بالمورّد. يتم أيضًا توفير
أدوات إنشاء وصف ABI ومقارنته
لواجهة Kernel Module Interface (KMI) كجزء من المستودع
الموضَّح في البيان.
يجب أن تكون سلسلة الأدوات المستخدَمة في إنشاء نواة GKI متوافقة تمامًا مع سلسلة الأدوات المُستخدَمة في إنشاء وحدات المورّدين. اعتبارًا من الإصدار 10 من Android، يجب إنشاء جميع نواة Android باستخدام سلسلة أدوات LLVM. باستخدام GKI، يجب أن تُنشئ سلسلة أدوات LLVM المستخدَمة لإنشاء ملف تعريف ABI نفسه المستخدَم في سلسلة أدوات LLVM من AOSP، ويجب أن يضمن الشركاء توافق KMI مع نواة GKI. ننصح بشدة باستخدام أدوات الإنشاء المقدَّمة لأنّها توفّر أفضل توافق.
ما هي الخطوات التالية؟
للحصول على تعليمات حول إنشاء النواة باستخدام عملية الإنشاء المحكم ومجموعة أدوات LLVM، يُرجى الرجوع إلى مقالة إنشاء النوى.
للحصول على تعليمات حول كيفية مراقبة ABI وحلّ المشاكل، يُرجى الرجوع إلى مقالة مراقبة ABI لنظام تشغيل Android.