هناك نوعان من وحدات النواة: وحدات GKI غير المرتبطة بالأجهزة ووحدات المورّد المرتبطة بالأجهزة. تقدّم هذه الصفحة نظرة عامة على كلا النوعين من الوحدات.
وحدات GKI
تُستخدَم وحدات صورة النواة العامة (GKI) لتوفير إمكانات النواة غير المطلوبة للتشغيل بشكل منفصل عن النواة الأساسية العامة. باستخدام وحدات GKI، يمكنك اختيار إمكانات محدّدة من النواة لاستخدامها، ما يؤدي غالبًا إلى تقليل حجم صورة النواة واستهلاك الذاكرة أثناء التشغيل. ويجعل هذا الانخفاض في الحجم GKI مناسبًا لأجهزة Android Go وعوامل الشكل الأخرى التي تتضمّن قيودًا على الموارد.
توفّر وحدات GKI أيضًا آلية تتيح للمورّدين دمج ميزات جديدة من المصدر بعد مرحلة تجميد KMI. لا يمكن استبدال الرمز البرمجي المضمّن بدون إنشاء صورة أخرى، بينما يمكن استبدال الرمز البرمجي المقدَّم كوحدة نمطية بوحدة نمطية أخرى.
تستخدِم وحدات GKI البنية الأساسية للتوقيع في مدّة التصميم الخاصة بالنواة للتمييز بين GKI والوحدات الأخرى في وقت التشغيل. يُسمح بتحميل الوحدات غير الموقّعة طالما أنّها تستخدم الرموز التي تظهر في القائمة المسموح بها أو التي توفّرها وحدات غير موقّعة أخرى.
هناك نوعان منطقيان من وحدات GKI: وحدة GKI المحمية ووحدة GKI غير المحمية.
وحدة GKI المحمية
تقدّم Google وحدة GKI محمية، ولا يتم فرض أي قيود عليها، وتتصرّف كما لو تم إنشاؤها باستخدام النواة بعد التحميل. بالإضافة إلى ذلك، تتضمّن وحدات صورة النواة العامة المحمية الخصائص التالية:
- يمكن لوحدات GKI المحمية الوصول إلى رموز النواة غير المتوافقة مع KMI والتي لا تتوفّر لوحدات المورّد أو وحدات GKI غير المحمية.
- يمكن لوحدات GKI المحمية تصدير الرموز التي تصبح جزءًا من KMI طالما تم الاستشهاد بهذه الرموز في قائمة الرموز.
- لا يمكن إلغاء وحدات GKI المحمية بوحدات البائعين.
وحدة GKI المحمية هي الفئة التلقائية لوحدات GKI. تُعدّ جميع وحدات GKI محمية في وقت تجميد واجهة KMI.
وحدة GKI غير محمية
يمكن استبدال وحدة GKI غير محمية بوحدة مورّد. بعد تجميد واجهة KMI، قد تتم إعادة تصنيف وحدة GKI محمية على أنّها غير محمية إذا قرّر فريق GKI أنّه على المورّدين إلغاء التنفيذ التلقائي باستخدام إصدار يتضمّن ميزات جديدة من Linux. في إصدار GKI التالي، سيتم إعادة تصنيف الوحدات غير المحمية على أنّها محمية بعد أن يتم دمج رمز المصدر في Android Common Kernel (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.