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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

وحدات GKI

تُستخدم وحدات صورة Kernel العامة (GKI) لتقديم وظائف 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 حالية لم يتم تسليمها كجزء من GKI kernel كوحدة بائع.

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

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

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