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

نواة المنتج ، والمعروفة أيضًا باسم نواة الجهاز أو نواة OEM ، هي النواة التي تقوم بشحنها على جهازك. قبل GKI، تم اشتقاق نواة المنتج من سلسلة من تغييرات النواة الأولية. يوضح الشكل 1 كيف تؤدي إضافات النواة إلى إنتاج نواة المنتج (OEM/نواة الجهاز):

بناء نواة المنتج قبل GKI

الشكل 1. بناء نواة منتج ما قبل GKI.

  1. تم تعديل نواة Linux Long Term Supported (LTS) من kernel.org باستخدام تصحيحات خاصة بنظام Android مما أدى إلى ظهور Android Common Kernel (ACK) .
  2. تم تعديل ACK بواسطة البائعين الذين أضافوا دعمًا لنظامهم على شريحة (SoC). قد يضيف البائعون أيضًا تحسينات في الأداء أو الطاقة. تسمى النواة الناتجة بالنواة البائعة .
  3. أخيرًا، تم تعديل نواة البائع بشكل أكبر بواسطة مصنعي المعدات الأصلية (OEM) باستخدام برامج تشغيل الأجهزة الإضافية والتخصيصات التي يرونها ضرورية. تسمى النواة الناتجة نواة المنتج .

كل هذه التعديلات يمكن أن تؤدي إلى أن ما يصل إلى 50% من كود kernel هو كود خارج الشجرة وليس من نواة Linux الأولية أو ACKs. قبل GKI، كان كل جهاز تقريبًا يحتوي على نواة مخصصة أدت إلى تجزئة النواة.

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

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

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

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

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

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

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

يمنع ترقيات إصدار نظام Android الأساسي

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

من الصعب المساهمة بتغييرات kernel مرة أخرى إلى نظام Linux الأساسي

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

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

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

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

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

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

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

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

  • تم تقديم GKI 1.0 في Android 11 للأجهزة ذات 5.4 نواة. ينطبق GKI 1.0 على جميع الأجهزة المشحونة بنواة 5.4، حتى تلك التي تم إطلاقها باستخدام Android 12 أو Android 13.
  • تم تقديم GKI 2.0 في نظام التشغيل Android 12 للأجهزة التي تحتوي على نواة 5.10 وهو المعيار الجديد لجميع الأجهزة التي تأتي مع نواة 5.10 أو أحدث.

جي كي آي 1.0

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

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

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

جي كي آي 2.0

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

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

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