الحفاظ على واجهة وحدة Kernel (KMI) مستقرة

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

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

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

  • يكون KMI مستقرًا فقط داخل نفس إصدار LTS وAndroid للنواة، مثل android13-5.10 أو android12-5.10 أو android13-5.15 .

    • لا يتم الحفاظ على استقرار KMI لـ android-mainline .
  • تُستخدم فقط سلسلة أدوات Clang المحددة المتوفرة في AOSP والمحددة للفرع المقابل لبناء النواة والوحدات النمطية.

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

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

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

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

تضمن عملية البناء المحكم وجود KMI مستقرًا من خلال وجود بيانات repo في kernel/manifest التي تصف بيئة البناء بشكل كامل. على سبيل المثال، يشتمل البيان الخاص android13-5.15 على سلسلة الأدوات والبرامج النصية للإنشاء وكل شيء آخر مطلوب لإنشاء نواة صورة Kernel العامة (GKI). تضمن ملفات تكوين build.config ذات الصلة، مثل GKI build config build.config.gki.aarch64 ، استخدام الأدوات المضمنة بشكل صحيح لإنشاء نتائج بناء متسقة.

يضمن استخدام عملية البناء المحكم أيضًا أن يكون وصف ABI للشجرة متسقًا سواء تم إنشاؤه بواسطة Google (على سبيل المثال، abi_gki_aarch64.xml لنظام android13-5.15 أو تم إنشاؤه في شجرة محلية تتضمن وحدات البائع. أدوات إنشاء ومقارنة يتم أيضًا توفير وصف ABI لواجهة وحدة Kernel (KMI) كجزء من الريبو الموصوف في البيان.

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

ماذا بعد؟

  • للحصول على تعليمات حول بناء النواة باستخدام عملية البناء المحكم وسلسلة أدوات LLVM، راجع الرجوع إلى Build kernels .

  • للحصول على إرشادات حول كيفية مراقبة واجهة برمجة التطبيقات (ABI) وإصلاح المشكلات، راجع مراقبة Android Kernel ABI