النواة الشائعة في Android

النواة الشائعة لنظام التشغيل AOSP (المعروفة أيضًا باسم النواة الشائعة لنظام التشغيل Android أو ACKs) هي نواة تابعة لـ النواة kernel.org وتتضمّن تصحيحات تهمّ منتدى Android ولم يتم دمجها في النواة الرئيسية أو النواة التي تتلقّى دعمًا على المدى الطويل (LTS). يمكن أن تشمل هذه الرقع ما يلي:

  • ميزات Android التي تتطلب وظائف من الإصدارات السابقة أو ميزات محدّدة
  • الميزات جاهزة لأجهزة Android ولكن لا تزال قيد التطوير في قناة الإصدار العلني
  • ميزات المورّد/المصنّع الأصلي للجهاز المفيدة لشركاء المنظومة المتكاملة الآخرين

android-mainline هو فرع التطوير الأساسي لميزات Android. يتم دمج الإصدار الرئيسي من Linux في android-mainline كلما نشر "لينوس توروالدز" إصدارًا أو إصدارًا مرشحًا. قبل عام 2019، كانت نواة Android الشائعة تُنشئ عن طريق استنساخ نواة LTS التي تم الإعلان عنها مؤخرًا وإضافة التصحيحات الخاصة بنظام Android. تم تغيير هذه العملية في عام 2019 لتقسيم "النواة الأساسية" الجديدة لنظام Android من android-mainline. ويتجنّب هذا النموذج الجديد المجهود الكبير المبذول في إعادة توجيه المنفذ واختبار تصحيحات Android من خلال تحقيق النتيجة نفسها بشكلٍ تدريجي. يخضع الإصدار android-mainline لاختبارات مستمرة ومكثفة، ما يضمن أنّه يقدّم نواة عالية الجودة منذ يوم نشره.

عند الإعلان عن إصدار LTS جديد في الإصدار العلني، يتم إنشاء فرع من kernel الشائعة المقابلة من android-mainline. يتيح ذلك للشركاء بدء مشروع قبل إعلان إصدار LTS، وذلك من خلال الدمج من android-mainline. بعد إنشاء فرع kernel المشترَك الجديد، يمكن للشركاء تغيير مصدر دمج الفرع الجديد بسلاسة.

تتلقّى فروع النواة الشائعة الأخرى عمليات دمج منتظمة من نواة LTS المرتبطة بها. ويتم عادةً إجراء عمليات الدمج هذه فور نشر إصدار LTS. على سبيل المثال، عند نشر الإصدار 6.1.75 من Linux، تم دمجه في ‎6.1 common kernel (android14-6.1). ننصح الشركاء بشدة بتعديل أنوية نظام التشغيل للبقاء على اطّلاع بآخر إصلاحات الأخطاء الخاصة بإصدار LTS وAndroid.

فرع نواة KMI الذي تمّ الإقرار به

تحتوي نواة GKI على واجهة Kernel Module Interface (واجهة وحدة النواة) الثابتة. يتم تحديد قاعدة بيانات KMI بشكلٍ فريد من خلال إصدار kernel وإصدار نظام Android الأساسي، لذا يتم تسمية الإصدارات الفرعية ANDROID_RELEASE-KERNEL_VERSION. على سبيل المثال، kernel GKI 6.1 لنظام التشغيل Android 14 يحمل الاسم android14-6.1. تم طرح android15-6.6 نواة GKI في الإصدار Android 15.

نواة الميزات والإطلاق

قبل الإصدار 15 من Android، كان بالإمكان استخدام أي من أحدث ثلاث نواة لتشغيل الجهاز. بدءًا من الإصدار 15 من Android، يمكن استخدام أحدث إصدارَين من kernel لتشغيل الجهاز. نواة التشغيل لنظام التشغيل Android 15 هي android15-6.6 وandroid14-6.1.

بما أنّ ترقيات النواة ليست مطلوبة عند تحديث إصدار النظام الأساسي، يمكن استخدام النواة التي لا تتضمّن أحدث الميزات لإصدار نظام أساسي لتشغيل الأجهزة. وبالتالي، يمكن استخدام نواة نظام التشغيل التي تم تصميمها ليعمل على الإصدار Android 14، مثل android14-6.1، على الأجهزة حتى بعد ترقية إصدار النظام الأساسي إلى Android 15.

إصدار نظام Android الأساسي نوى التشغيل نوى الميزات
Android 15 (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4 android11-5.4

1 قد تنطبق قيود إضافية إذا تم تعديل BSP المرتبط بإصدار المنصة. بعبارة أكثر عمومية، يجب أن يكون رقم إصدار Android للنواة أعلى من أو يساوي إصدار FCM المستهدَف. لمعرفة التفاصيل، يُرجى الاطّلاع على عنصر واجهة المورّد - مطابقة فروع النواة.

التسلسل الهرمي العام للنواة

إنشاء فرع من android-mainline

يظهر المستوى الأعلى من التدرّج الهرمي للنواة الشائعة في الشكل 1.

إنشاء نوى شائعة من نواة android-mainline

الشكل 1: إنشاء نوى شائعة من نواة android-mainline

يُرجى العلم أنّه تم إنشاء نواة Android شائعة جديدة android14-6.1 من android-mainline في عام 2022. في عام 2023، عندما تم الإعلان عن قناة الإصدارات الثابتة التالية، تم إنشاء الإصدار android15-6.6 من الإصدار android-mainline.

كما هو موضّح في الشكل 1، يمكن أن يكون كل إصدار من الإصدارات الأساسية أساسًا لإصدارَين من نواة GKI. على سبيل المثال، نواةَا الإصدار 5.15 هما android13-5.15 وandroid14-5.15، وكلاهما نواة تتضمّن ميزات لإصدارات الأنظمة الأساسية المعنيّة. كان هذا هو الحال أيضًا مع الإصدار 5.10، حيث تم إنشاء الإصدار android12-5.10 عند إعلان إصدار LTS، وتم إنشاء الإصدار android13-5.10 من الإصدار android12-5.10 عند اكتمال ميزة kernel في الربيع 2021 للسماح بتطوير ميزات لنظام التشغيل Android 13. بدءًا من Android 15 (2024)، يتوفّر فقط قِنْدر GKI جديد واحد لكل إصدار من الإصدارات (لا يتوفّر قِنْدر android15-6.1).

مراحل نشاط فرع KMI في ACK

يظهر مسار حياة فرع KMI في ACK أدناه في الشكل 2.

6.6 دورة حياة فرع KMI في ACK

الشكل 2: 6.6 دورة حياة فرع KMI في ACK

لتوضيح عملية التطوير ودورة حياة الفرع، يركز الشكل 2 على مشاريع ACK KMI الفرعية للإصدار 6.6.

ينتقل كل فرع من فروع ACK KMI خلال ثلاث مراحل موضّحة في الشكل 2 باستخدام ألوان مختلفة في كل فرع. كما هو موضّح، يتم دمج الإصدارات الثابتة طويلة المدى بانتظام بغض النظر عن مرحلتها.

مرحلة التطوير

عند إنشائه، يدخل فرع KMI في ACK إلى مرحلة التطوير (المصنَّف باسم dev في الشكل 2)، ويكون مفتوحًا لمساهمات الميزات في الإصدار التالي من منصّة Android. في الشكل 2، تم إنشاء android15-6.6 عندما تم إعلان الإصدار 6.6 كإصدار جديد من نواة LTS.

مرحلة الاستقرار

عندما يتم الإعلان عن اكتمال ميزة فرع KMI في ACK، يدخل الفرع في مرحلة الاستقرار (المصنَّف على أنّه مستقر في الشكل 2). لا نزال نقبل ميزات الشركاء وإصلاحات الأخطاء، ولكن يتم تفعيل تتبُّع "الميزات التي ينشئها الشركاء" لرصد أي تغييرات تؤثر في الواجهة. في هذه المرحلة، يتم قبول التغييرات التي قد تؤدي إلى حدوث أعطال في KMI وتعديل تعريف KMI وفقًا لدورات زمنية محدّدة مسبقًا (عادةً كل أسبوعين). اطّلِع على نظرة عامة على "شركاء Google للتطوير" للاطّلاع على تفاصيل حول مراقبة "مؤشر أداء القنوات".

المرحلة المتوقّفة لنموذج KMI

قبل طرح إصدار جديد من المنصة على AOSP، يتم تجميد فرع KMI في ACK ويظل مجمّدًا طوال مدة توفّره. وهذا يعني أنّه لا يتم قبول أي تغييرات تؤدي إلى إيقاف KMI ما لم يتم رصد مشكلة أمان خطيرة لا يمكن تجنّبها بدون التأثير في KMI الثابت. لتجنُّب حدوث تعطُّل في KMI، قد يتم تعديل بعض الرقع التي تم دمجها من الإصدار LTS أو إزالتها إذا لم يكن الإصلاح مطلوبًا لأجهزة Android.

عند تجميد فرع KMI في ACK، يمكن قبول إصلاحات الأخطاء وميزات الشركاء ما دامت نواة KMI المشتركة الحالية تعمل بشكل سليم. يمكن توسيع نطاق تنسيق KMI باستخدام رموز جديدة تم تصديرها طالما أنّ الواجهات التي تتألف منها تنسيق KMI الحالي لم تتأثر. عند إضافة واجهات جديدة إلى واجهة برمجة التطبيقات لنظام KMI، تصبح مستقرة على الفور ولا يمكن أن تتعطّل بسبب التغييرات المستقبلية.

على سبيل المثال، لا يُسمح بإجراء تغيير يضيف حقلًا إلى بنية تستخدمها واجهة KMI النواة المشتركة لأنّه يغيّر تعريف الواجهة:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

ومع ذلك، لا بأس بإضافة دالة جديدة:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

طوال فترة استخدام نواة GKI، يتم الحفاظ على التوافق مع الإصدارات القديمة من مساحة المستخدمين حتى يمكن استخدامها بأمان مع إصدار نظام التشغيل Android الذي تم إطلاق الجهاز به. يضمن الاختبار المستمر باستخدام الإصدارات السابقة الحفاظ على التوافق. وبالتالي، في الشكل 2، يمكن استخدام android15-6.6 النواة لأجهزة Android 15 والإصدارات الأحدث. بما أنّ إصدار نظام Android الأساسي متوافق أيضًا مع الإصدارات السابقة، يمكن استخدام نواة android14-6.1 لأجهزة Android 15 سواءً للإطلاق أو الترقية.

رقم إنشاء مفتاح KMI

في حال حدوث عملية دمج مع الإصدار الثابت أثناء مرحلة الاستقرار أو حدوث مشكلة أمنية أو حدث آخر بعد ذلك يتطلّب قبول تصحيح يغيّر معرّف KMI، يتمّ زيادة رقم إنشاء معرّف KMI المسجّل في build.config.common. يمكن العثور على جيل KMI الحالي باستخدام الأمر uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

يشير الرقم الوارد بعد إصدار المنصة إلى إنشاء KMI (6 في هذه الحالة).

في حال تغيّر الجيل المحدَّد من KMI، لن تكون النواة متوافقة مع وحدات المورّدين التي تتوافق مع الجيل السابق من KMI، لذا يجب إعادة إنشاء الوحدات وتعديلها بشكل متزامن مع النواة. بعد تجميد قاعدة معلومات KMI، من المتوقّع أن تكون التغييرات في إنشاء قاعدة معلومات KMI نادرة جدًا.

التوافق بين النوى

إنّ متطلبات التوافق بين نواة نظام التشغيل في مجموعة الإصدارات الطويلة المدى نفسها ستتغيّر اعتبارًا من نواة GKI الجديدة.

نوى GKI

تحافظ نوى GKI على التوافق مع الإصدارات القديمة من جميع إصدارات قاعدة نظام Android العاملة مع إصدار النواة. بالإضافة إلى ذلك، تتوافق إصدارات منصّة Android مع نواة GKI من الإصدارات السابقة. بالتالي، يمكنك استخدام نواة android14-6.1 التي تم تطويرها لنظام التشغيل Android 14 (2023) بأمان على الأجهزة التي تعمل بالإصدار Android 15 (2024). يتم التحقّق من التوافق من خلال اختبار VTS وCTS المستمر لنواة GKI مع جميع الإصدارات المتوافقة.

يكون رمز KMI ثابتًا حتى يمكن تحديث النواة بدون الحاجة إلى إعادة إنشاء وحدات النواة في صورة المورّد.

لا يتم الحفاظ على توافق KMI بين نوى GKI المختلفة. لذلك، على سبيل المثال، لا يمكن استبدال نواة android14-6.1 بنواة android15-6.6 بدون إعادة إنشاء جميع الوحدات.

تكون نواة GKI متوافقة مع الإصدارات الأولية والإصدارات اللاحقة فقط. ولا يمكن استخدامها مع الإصدارات القديمة. وبالتالي، فإنّه لا يمكن استخدام ملف تعريف برمجي android15-6.6 مع الأجهزة التي تعمل بنظام التشغيل Android 14 (2023).

مصفوفة التوافق

يعرض هذا الجدول إصدارات kernel المتوافقة والمُختبَرة مع كل إصدار من إصدارات نظام Android الأساسي.

إصدار نظام Android الأساسي نواة النظام المتوافقة للترقية نواة التشغيل المتوافقة
Android 15 (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4 android11-5.4

دعم فترات الصلاحية ورموز تصحيح الأمان

تتلقّى قنوات الإصدار العلني عمليات دمج الإصدارات الطويلة المدى من المصدر وإصلاحات الأخطاء للرمز البرمجي المخصّص لنظام التشغيل Android. وتشمل هذه الإصلاحات جميع رموز تصحيح أمان النواة المُشار إليها في النشرات الأمنية لنظام التشغيل Android الشهرية ذات الصلة بميزة "التأكّد من الإذن".

قد تكون التعديلات التلقائية متاحة لفترة أطول من الإصدار الثابت المتوافق من kernel على kernel.org. في هذه الحالة، تقدّم Google دعمًا ممتدًا حتى تاريخ إيقاف التحديثات (EOL) المعروض في هذا القسم. عند إيقاف نواة نظام التشغيل نهائيًا، تتوقف Google عن دعمها ويصبح الجهاز الذي يستخدمها عرضة للاختراق.

بدءًا من الإصدار 6.6 من النواة، أصبح مهلة دعم النوى الثابتة هي 4 سنوات.

يعرض هذا الجدول أوقات صلاحية إشارات الاستلام المتوافقة:

فرع ACK تاريخ
الإطلاق
فترة الدعم
مدى الحياة
(بالسنوات)
EOL
android11-5.4 2019-11-24 6 2026-01-01
android12-5.4 2019-11-24 6 2026-01-01
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 4 2028-07-01

اختبار النواة الشائع

يتم اختبار النوى الشائعة باستخدام عدة أنظمة للتكامل المستمر بالإضافة إلى الاختبار المتعلّق بالإصدارات اللاحقة الذي يُجريه المورّدون.

الاختبار الوظيفي لنظام التشغيل Linux Kernel

تبدأ اختبارات الاختبار الوظيفي لنظام تشغيل Linux (LKFT) مجموعة متنوعة من مجموعات الاختبار، بما في ذلك kselftest وLTP وVTS وCTS على مجموعة من أجهزة arm32 وarm64. يمكنك الاطّلاع على نتائج الاختبار الأخيرة هنا.

اختبار KernelCI

يتم بدء اختبارات الإنشاء والتشغيل في KernelCI عند تأكيد تصحيح جديد في فرع kernel شائع. يتم اختبار عدة مئات من إعدادات الإنشاء وتشغيلها على لوحات مختلفة. يمكنك الاطّلاع على هنا على أحدث نتائج اختبارات نواة Android.

اختبار ما قبل إرسال التطبيق وما بعد إرساله على Android

تُستخدَم اختبارات ما قبل الإرسال لمنع حدوث أعطال في ملفّات ‎"النواة الشائعة لنظام التشغيل Android". يمكن العثور على ملخّص نتائج الاختبار في علامة التبويب "عمليات التحقّق" لتغيير الرمز في Gerrit لنظام التشغيل Android kernel common.

يتم إجراء اختبار ما بعد الإرسال لنظام التشغيل Android على النُسخ الجديدة المنشورة في فروع نواة Android الشائعة عند التزام الرموز البرمجية الجديدة بفرع نواة Android شائع في ci.android.com. من خلال إدخال aosp_kernel كاسم فرع جزئي في ci.android.com، ستظهر لك قائمة بفروع النواة التي تتوفّر فيها النتائج. على سبيل المثال، يمكن العثور على نتائج android-mainline هنا. عند النقر على إصدار معيّن، ستظهر حالة الاختبار في علامة التبويب Test Results.

سيتم تنفيذ الاختبارات المحدّدة من خلال تعيين الاختبار مع مجموعة الاختبار kernel-presubmit في شجرة مصدر نظام Android الأساسي كعملية إرسال مُسبَق لتفرعات نواة Android. على سبيل المثال، سيؤدي ضبط الإعدادات التالية في test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING إلى تفعيل vts_kernel_proc_file_api_test كاختبار قبل الإرسال عند تسجيل رمز kernel العام في Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

اختبار أول يوم

يُجري اختبار اليوم 0 اختبارًا لكل تصحيح على حدة على جميع فروع نواة Android الشائعة عند تأكيد تصحيحات جديدة. يتم إجراء اختبارات مختلفة لبدء التشغيل والوظائف والأداء. الانضمام إلى المجموعة العامة cros-kernel-buildreports

مصفوفة الاختبار

نواة Android الشائعة إصدارات نظام Android الأساسي مجموعات الاختبار
الهاتف الرئيسي 15 14 13 12 11 10 LKFT KernelCI قبل الإرسال بعد إرسال العينة 0 يوم
android-mainline
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4

المساهمة في تطوير نواة Android الشائعة

بشكل عام، يجب تطوير الميزات على الإصدار الرئيسي من Linux وليس على ملف تعريف برمجي عادي لنظام التشغيل Android. ننصح بشدة بتطوير الإصدارات العلنية، وبعد قبول التطوير هناك، يمكن بسهولة نقله إلى الفرع المحدّد من ACK حسب الحاجة. يسرّ فريق Android Kernel تقديم الدعم لجهود نشر الإصدارات إلى القنوات الرسمية من أجل خدمة منظومة Android المتكاملة.

أرسِل الإصلاحات إلى Gerrit وتأكَّد من اتّباع إرشادات المساهمة هذه.