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

هناك نوعان من وحدات kernel: وحدات GKI الحيادية للأجهزة ووحدات البائع الخاصة بالأجهزة. توفر هذه الصفحة نظرة عامة على كلا النوعين من الوحدات.

وحدات GKI

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

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

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

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

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

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

  • تتمتع وحدات GKI المحمية بإمكانية الوصول إلى رموز kernel غير التابعة لـ 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 والوظائف الخاصة بالجهاز. يمكن تسليم أي وحدة kernel موجودة لم يتم تسليمها كجزء من kernel GKI كوحدة بائع.

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

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

يمكنك تسليم وحدات البائع في vendor أو vendor_boot . يجب أن تكون الوحدات المطلوبة في وقت مبكر من عملية التمهيد في vendor_boot . هناك تكلفة وقت التمهيد مرتبطة بتحميل الوحدات من vendor_boot .