هناك نوعان من وحدات النواة: وحدات 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 غير المحمية.
وحدات المورّدين
يقدّم الشركاء وحدة المورّد لتنفيذ ميزات تتعلّق بالمنظومة على الرقاقة والجهاز. يمكن تسليم أي وحدة نواة حالية غير مضمّنة في ملف تعريف ملف التمهيد 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
.