نظرة عامة على وحدات النواة

هناك نوعان من وحدات النواة: وحدات GKI غير المرتبطة بالأجهزة ووحدات المورّد المرتبطة بالأجهزة. تقدّم هذه الصفحة نظرة عامة على كلا النوعين من الوحدات.

وحدات GKI

تُستخدَم وحدات صورة النواة العامة (GKI) لتوفير إمكانات النواة غير المطلوبة للتشغيل بشكل منفصل عن نواة النظام الأساسية العامة. باستخدام وحدات GKI، يمكنك اختيار إمكانات محدّدة من النواة لاستخدامها، ما يؤدي غالبًا إلى تقليل حجم صورة النواة واستهلاك الذاكرة أثناء التشغيل. ويجعل هذا الانخفاض في الحجم GKI مناسبًا لأجهزة Android Go وعوامل الشكل الأخرى التي تتضمّن قيودًا على الموارد.

توفّر وحدات GKI أيضًا آلية تتيح للمورّدين دمج ميزات جديدة من المصدر بعد مرحلة تجميد KMI. لا يمكن استبدال الرمز البرمجي المضمّن بدون إنشاء صورة أخرى، بينما يمكن استبدال الرمز البرمجي المقدَّم كوحدة نمطية بوحدة نمطية أخرى.

تستخدِم وحدات GKI بنية أساسية للتوقيع في وقت الإنشاء خاصة بالنواة من أجل التمييز بين GKI والوحدات الأخرى في وقت التشغيل. يُسمح بتحميل الوحدات غير الموقّعة طالما أنّها تستخدم الرموز التي تظهر في القائمة المسموح بها أو التي توفّرها وحدات غير موقّعة أخرى.

هناك نوعان منطقيان من وحدات GKI: وحدة GKI المحمية ووحدة GKI غير المحمية.

وحدة GKI المحمية

تقدّم Google وحدة GKI محمية، ولا يتم فرض أي قيود عليها، وتتصرّف كما لو تم إنشاؤها باستخدام النواة بعد التحميل. بالإضافة إلى ذلك، تتضمّن وحدات GKI المحمية الخصائص التالية:

  • يمكن لوحدات GKI المحمية الوصول إلى رموز النواة غير المتوافقة مع KMI والتي لا تتوفّر لوحدات المورّد أو وحدات GKI غير المحمية.
  • يمكن لوحدات GKI المحمية تصدير رموز تصبح جزءًا من KMI طالما تم الاستشهاد بهذه الرموز في قائمة الرموز.
  • لا يمكن لوحدات البائعين إلغاء وحدات GKI المحمية.

وحدة GKI المحمية هي الفئة التلقائية لوحدات GKI. تُعدّ جميع وحدات GKI محمية عند تجميد KMI.

وحدة GKI غير محمية

يمكن استبدال وحدة GKI غير محمية بوحدة مورّد. بعد تجميد واجهة KMI، قد يتم إعادة تصنيف وحدة GKI محمية على أنّها غير محمية إذا قرّر فريق GKI أنّه على المورّدين إلغاء التنفيذ التلقائي باستخدام إصدار يتضمّن ميزات جديدة من Linux. في إصدار GKI التالي، سيتم إعادة تصنيف الوحدات غير المحمية على أنّها محمية بعد أن يتم دمج الرمز البرمجي من المصدر الرئيسي في نواة Android الشائعة (ACK). تتضمّن وحدات GKI غير المحمية الخصائص التالية:

  • تتمتّع وحدات GKI غير المحمية بإمكانية الوصول نفسها إلى الرموز التي تم تصديرها مثل وحدات المورّد.
  • لا يمكن لوحدات GKI غير المحمية تصدير الرموز التي تصدّرها وحدات GKI المحمية.
  • يجب أن تحتفظ وحدات GKI غير المحمية بأي واجهات KMI كما لو كانت جزءًا من النواة الأساسية.
  • يمكن لوحدات البائعين إلغاء وحدات GKI غير المحمية.

وحدات المورّدين

يقدّم الشركاء وحدة المورّد لتنفيذ إمكانات خاصة بالمنظومة على الرقاقة (SoC) والجهاز. يمكن تقديم أي وحدة نواة حالية غير مضمّنة في نواة GKI كوحدة خاصة بالمورّد.

بما أنّ أحد الأهداف الأساسية لمشروع GKI هو تقليل الرموز البرمجية الخاصة بالأجهزة في النواة الأساسية، يمكن للمورّدين توقُّع ألا تتضمّن نواة GKI وحدات تدير أجهزتها بوضوح. على سبيل المثال، يمكن أن تتوقّع شركة ABC Inc. ألا يتم تفعيل إعدادات مثل CONFIG_ABC_SOC_SUPPORT كوحدات GKI مدمجة أو قابلة للتحميل بدون دعمها.

إذا كان برنامج تشغيل أو إطار عمل لنواة النظام متوفّرًا في ACK، ولكن لم يتم توفيره كجزء من نواة GKI، يمكن للمورّدين تعديل برنامج التشغيل وتوفيره كوحدة خاصة بالمورّد. ننصح بعدم إجراء تعديلات من هذا النوع على الوحدات غير الخاصة بمورّد معيّن، لأنّه قد يتم توفير الإمكانات نفسها في نواة GKI في إصدار مستقبلي. عندما تحتوي نواة GKI على إمكانات يوفّرها أحد وحدات المورّد، لن يتم تحميل وحدة المورّد. على سبيل المثال، لم يتم ضبط CONFIG_GREYBUS في GKI في Android 11، لذا يمكن للمورّدين توفير وحدات greybus الخاصة بالمورّدين. ومع ذلك، قد يتم تفعيل CONFIG_GREYBUS كبرنامج ثابت أو وحدة مدمجة في GKI في نظام Android 12، وفي هذه الحالة لن يتم تحميل وحدات Greybus الخاصة بالمورّد. من أفضل الممارسات استخدام الإصدار المتوافق مع أحدث إصدار من نظام التشغيل لبرامج التشغيل غير الخاصة بمورّد معيّن إذا تم توفيرها كوحدات خاصة بالمورّد.

يمكنك عرض وحدات المورّد في الصورة vendor أو الصورة vendor_boot. يجب أن تكون الوحدات المطلوبة في مرحلة مبكرة من عملية التشغيل في vendor_boot. هناك تكلفة مرتبطة بوقت التشغيل عند تحميل الوحدات من vendor_boot.