مشروع صورة النواة العامة (GKI)

تعد Android Common Kernels (ACKs) أساسًا لجميع نوى منتجات Android. نواة البائع والجهاز هي في نهاية المطاف ACKs. يضيف البائعون دعمًا لأنظمة SoCs والأجهزة الطرفية عن طريق تعديل كود مصدر kernel وإضافة برامج تشغيل الأجهزة. يمكن أن تكون هذه التعديلات واسعة النطاق لدرجة أن ما يصل إلى 50٪ من الكود الذي يتم تشغيله على الجهاز هو رمز خارج الشجرة وليس من Linux المنبع أو من نواة AOSP الشائعة.

وبالتالي ، فإن نواة الجهاز تتكون من:

  • المنبع: نواة Linux من kernel.org
  • AOSP: تصحيحات إضافية خاصة بنظام Android من نواة AOSP الشائعة
  • المُورِّد: SoC وتصحيحات التمكين والتحسين الطرفية من البائعين
  • OEM / الجهاز: برامج تشغيل وتخصيصات إضافية للأجهزة

يحتوي كل جهاز تقريبًا على نواة مخصصة. هذا هو تجزئة النواة.

يؤدي التسلسل الهرمي لنواة Android إلى التجزئة

الشكل 1. التسلسل الهرمي لنواة Android يؤدي إلى التجزئة

تكاليف التجزئة

تجزئة Kernel له العديد من التأثيرات السلبية على مجتمع Android.

تتطلب التحديثات الأمنية عمالة كثيفة

يجب نقل تصحيحات الأمان المذكورة في نشرة أمان Android (ASB) إلى كل نواة من نواة الجهاز. ومع ذلك ، نظرًا لتجزئة kernel ، فإنه من المكلف للغاية نشر إصلاحات الأمان على أجهزة Android في هذا المجال.

من الصعب دمج التحديثات المدعومة طويلة المدى

تتضمن إصدارات Long-Term Support (LTS) إصلاحات أمنية وإصلاحات أخرى للأخطاء الهامة. أثبت البقاء على اطلاع بإصدارات LTS أنه الطريقة الأكثر فعالية لتوفير إصلاحات الأمان. على أجهزة Pixel ، تم اكتشاف أن 90٪ من مشكلات أمان kernel التي تم الإبلاغ عنها في ASB قد تم إصلاحها بالفعل للأجهزة التي تظل محدثة.

ومع ذلك ، مع كل التعديلات المخصصة في نواة الجهاز ، من الصعب فقط دمج إصلاحات LTS في نواة الجهاز.

يمنع ترقيات إصدار منصة أندرويد

يجعل التجزئة من الصعب على ميزات Android الجديدة التي تتطلب إضافة تغييرات kernel إلى الأجهزة الموجودة في هذا المجال. يجب أن تفترض كود Android Framework أنه يتم دعم ما يصل إلى خمسة إصدارات من kernel وأنه لم يتم إجراء أي تغييرات على kernel لإصدار النظام الأساسي الجديد (يدعم Android 10 نواة 3.18 و 4.4 و 4.9 و 4.14 و 4.19 ، والتي لم يتم إجراؤها في بعض الحالات معززة بميزات جديدة منذ Android 8 في 2017).

من الصعب المساهمة بتغييرات kernel إلى المنبع لينكس

مع كل التغييرات التي يتم إجراؤها على kernel ، يتم شحن معظم الأجهزة الرئيسية بإصدار kernel لا يقل عمره عن 18 شهرًا. على سبيل المثال ، تم إصدار 4.14 kernel بواسطة kernel.org في نوفمبر 2017 وأول هواتف Android تستخدم 4.14 نواة تم شحنها في ربيع عام 2019.

هذا التأخير الطويل بين إصدار kernel الأساسي والمنتجات يجعل من الصعب على مجتمع Android تغذية الميزات وبرامج التشغيل المطلوبة في نواة المنبع.

إصلاح التجزئة: صورة النواة العامة

يعالج مشروع Generic Kernel Image (GKI) تجزئة kernel من خلال توحيد النواة الأساسية ونقل SoC ودعم اللوحة من النواة الأساسية إلى وحدات البائعين القابلة للتحميل. يقدم GKI أيضًا واجهة وحدة Kernel المستقرة (KMI) لوحدات البائعين ، لذلك يمكن تحديث الوحدات النمطية والنواة بشكل مستقل. بعض خصائص نواة GKI هي:

  • تم بناء نواة GKI من مصادر ACK.
  • نواة GKI هي نواة أحادية النواة بالإضافة إلى وحدات قابلة للتحميل لكل بنية ، لكل إصدار LTS (حاليًا arm64 فقط لنظام android11-5.4 و android12-5.4 ).
  • يتم اختبار نواة GKI مع جميع إصدارات Android Platform المدعومة لـ ACK المرتبط. لا يوجد إهمال للميزات طوال عمر إصدار GKI kernel.
  • تعرض نواة GKI KMI مستقرًا للسائقين داخل LTS معين.
  • لا تحتوي نواة GKI على رمز خاص بـ SoC أو رمز خاص باللوحة.

للحصول على صورة معمارية GKI ، راجع نظرة عامة على Kernel .

GKI هو تغيير معقد تم طرحه على عدة مراحل بدءًا من نواة v5.4 في إصدار نظام Android 11.

يوجد حاليًا مرحلتان من GKI:

  • تم تقديم GKI 1.0 في Android 11 للأجهزة التي تحتوي على 5.4 نواة. ينطبق GKI 1.0 على جميع الأجهزة المشحونة بـ 5.4 نواة ، حتى تلك التي تم إطلاقها بنظام Android 12 أو Android T (AOSP تجريبي).
  • تم تقديم GKI 2.0 في نظام Android 12 للأجهزة التي تحتوي على 5.10 نواة وهو المعيار الجديد لجميع الأجهزة المزودة بنواة 5.10 أو أحدث.

GKI 1.0.0 تحديث

في GKI 1.0 ، يجب أن تجتاز الأجهزة التي يتم تشغيلها باستخدام إصدار kernel 5.4 اختبار GKI (Android 11 وإصدارات النظام الأساسي الأحدث). تتضمن أهداف GKI 1.0 ما يلي:

  • تجنب الانحدار في مجموعة اختبار البائع (VTS) أو مجموعة اختبار التوافق (CTS) عند استبدال نواة المنتج بنواة GKI.
  • قلل عبء الشريك في الحفاظ على نواتهم محدثة باستخدام نواة AOSP الشائعة.
  • قم بتضمين تغييرات Android الأساسية في kernels للأجهزة التي يتم ترقيتها وإطلاقها مع إصدارات Android الجديدة.
  • لا تحطم مساحة مستخدمي Android.
  • افصل المكونات الخاصة بالأجهزة عن النواة الأساسية كوحدات قابلة للتحميل.

للحصول على وثائق GKI 1.0 ، راجع قسم GKI 1.0 .

GKI 2.0

في GKI 2.0 ، يجب أن يتم شحن الأجهزة التي يتم تشغيلها باستخدام إصدار kernel 5.10 أو أعلى مع GKI kernel (بدءًا من Android 12). تتوفر صور التمهيد الموقعة ويتم تحديثها بانتظام باستخدام LTS وإصلاحات الأخطاء الحرجة. نظرًا للحفاظ على الاستقرار الثنائي لـ KMI ، يمكنك تثبيت صور التمهيد هذه دون إجراء تغييرات على صور البائع. تتضمن أهداف GKI 2.0 ما يلي:

  • لا تقدم أداءً ملحوظًا أو تراجعًا في الطاقة عند استبدال نواة المنتج بنواة GKI.
  • تمكين الشركاء من تقديم إصلاحات أمان kernel وإصلاحات الأخطاء دون مشاركة البائع.
  • قلل تكلفة تحديث إصدار kernel الرئيسي للأجهزة (على سبيل المثال ، من v5.10 إلى 2021 LTS kernel).
  • احتفظ بنواة GKI ثنائية واحدة لكل بنية عن طريق تحديث إصدارات kernel بعملية واضحة للترقية.

يمثل GKI 2.0 أحدث حالة لنواة Android. تعكس وثائق Kernel خارج GKI 1.0 والأقسام الفرعية السابقة (<= 4.19) بنية GKI 2.0.