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

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

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

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

  • لا يكون KMI ثابتًا إلا ضمن إصدارات LTS وAndroid نفسها من النواة، مثل android14-6.1 أو android15-6.6 أو android16-6.12.

    • لا يتم الحفاظ على ثبات KMI في android-mainline.
  • يتم استخدام سلسلة أدوات Clang المحدّدة المتوفّرة في AOSP والمحدّدة للفرع ذي الصلة فقط لإنشاء النواة والوحدات.

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

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

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

استخدام عملية الإنشاء المحكمة وسلسلة أدوات LLVM

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

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

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

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