هناك نوعان من وحدات النواة: وحدات GKI غير المستندة إلى الأجهزة ووحدات المورّدين الخاصة بالأجهزة. تقدّم هذه الصفحة نظرة عامة على نوعَي الوحدات.
وحدات GKI
تُستخدَم وحدات صورة kernel العامة (GKI) لتقديم ميزات kernel غير المطلوبة لبدء التشغيل منفصلة عن kernel الأساسية العامة. باستخدام وحدات 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 غير المحمية.
وحدات المورّدين
يقدّم الشركاء وحدة المورّد لتنفيذ ميزات المنظومة على الرقاقة والميزات الخاصة بالجهاز. يمكن تسليم أي وحدة نواة حالية غير مضمّنة في ملف تعريف قاعدة بيانات تطبيقات Google Play للأجهزة الجوّالة (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
.