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

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

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

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

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

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

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

تجزئة 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 مرة أخرى إلى Linux المنبع

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

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

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

يعالج مشروع Generic Kernel Image (GKI) تجزئة النواة من خلال توحيد النواة الأساسية ونقل 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 13.
  • تم تقديم 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 ما يلي:

  • تجنب الانحدار في Vendor Test Suite (VTS) أو Compatibility Test Suite (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.

و

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

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

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

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

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

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

تجزئة 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 مرة أخرى إلى Linux المنبع

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

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

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

يعالج مشروع Generic Kernel Image (GKI) تجزئة النواة من خلال توحيد النواة الأساسية ونقل 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 13.
  • تم تقديم 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 ما يلي:

  • تجنب الانحدار في Vendor Test Suite (VTS) أو Compatibility Test Suite (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.