الحفاظ على واجهة وحدة نواة مستقرة

من المهم الحفاظ على واجهة وحدة نواة مستقرة (KMI) لوحدات المصنّعين. يتم إنشاء نواة GKI وشحنها في شكل ثنائي، ويتم إنشاء الوحدات القابلة للتحميل من المصنّعين في شجرة منفصلة. يجب أن تعمل نواة GKI والوحدات من المصنّعين الناتجة كما لو تم إنشاؤها معًا.

بشكل عام، لم تكن مجموعة Linux راضية عن فكرة استقرار واجهة التطبيق الثنائية (ABI) داخل النواة للنواة الرئيسية. في ظل مجموعات الأدوات والإعدادات المختلفة ونواة Linux الرئيسية المتطورة باستمرار، لا يمكن الحفاظ على واجهة وحدة نواة مستقرة (KMI) في النواة الرئيسية. ومع ذلك، من الممكن الحفاظ على واجهة وحدة نواة مستقرة (KMI) في بيئة GKI شديدة التقييد مع هذه القيود:

  • لا يمكن استخدام سوى إعداد واحد، وهو gki_defconfig، لإنشاء النواة.

  • تكون واجهة وحدة النواة مستقرة فقط ضمن إصدار LTS وإصدار Android نفسهما لنواة، مثل android14-6.1 أو android15-6.6 أو android16-6.12.

    • لا يتم الحفاظ على استقرار واجهة وحدة النواة لـ android-mainline.
  • لا يتم استخدام سوى مجموعة أدوات Clang المحدّدة المتوفرة في AOSP والمحدّدة للفرع المقابل لإنشاء النواة والوحدات.

  • لا يتم رصد استقرار سوى الرموز المعروفة بأنّ الوحدات تستخدمها كما هو محدّد في قائمة الرموز، وتُعتبر رموز واجهة وحدة النواة.

    • النتيجة المترتبة على ذلك هي أنّه يجب ألا تستخدم وحدات المصنّعين سوى رموز واجهة وحدة النواة. يتم فرض هذا القيد من خلال تعذُّر تحميل الوحدات إذا كانت هناك حاجة إلى رموز غير رموز واجهة وحدة النواة.
  • بعد تجميد فرع واجهة وحدة النواة، يُسمح بإجراء تغييرات ولكن لا يمكن أن تؤدي إلى إيقاف واجهة وحدة النواة. تشمل هذه التغييرات ما يلي:

    • تغييرات الإعدادات
    • تغييرات رمز النواة
    • تغييرات مجموعة الأدوات (بما في ذلك التحديثات)

استخدام عملية التصميم المحكمة ومجموعة أدوات LLVM

تضمن عملية التصميم المحكمة واجهة وحدة نواة مستقرة من خلال وصف ملفات repo بالكامل لبيئة الإصدار في kernel/manifest. على سبيل المثال، يتضمّن ملف البيان لـ android16-6.12 مجموعة الأدوات ونظام التصميم وكل ما يلزم لإنشاء نواة "صورة النواة العامة" (GKI). يضمن إعداد الإنشاء، وبشكل أساسي BUILD.bazel، استخدام الأدوات المُضمّنة بشكل صحيح لإنشاء نتائج إنشاء متّسقة.

يضمن استخدام عملية إنشاء محكمة أيضًا أنّ وصف واجهة التطبيق الثنائية (ABI) للشجرة متّسق سواء تم إنشاؤه من قِبل Google (على سبيل المثال، gki/aarch64/abi.stgلـ android16-6.12) أو تم إنشاؤه في شجرة محلية تتضمّن وحدات المصنّعين. يتم أيضًا توفير الأدوات اللازمة لإنشاء وصف واجهة التطبيق الثنائية (ABI) لواجهة وحدة النواة ومقارنته كجزء من المستودع الذي يصفه ملف البيان.

يجب أن تكون مجموعة الأدوات المستخدَمة لإنشاء نواة GKI متوافقة تمامًا مع مجموعة الأدوات المستخدَمة لإنشاء وحدات المصنّعين. اعتبارًا من Android 10، يجب إنشاء جميع نِوى Android باستخدام مجموعة أدوات LLVM. باستخدام GKI، يجب أن تنشئ مجموعة أدوات LLVM المستخدَمة لإنشاء نِوى المنتجات ووحدات المصنّعين واجهة التطبيق الثنائية (ABI) نفسها التي تنشئها مجموعة أدوات LLVM من AOSP، ويجب أن يضمن الشركاء أنّ واجهة وحدة النواة متوافقة مع نواة GKI. ننصح بشدة باستخدام أدوات الإنشاء المتوفّرة لأنّها توفّر أفضل توافق.

ما هي الخطوات التالية؟