النواة الشائعة في 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) جديدة، تتفرع النواة المشتركة المقابلة من android-mainline. يتيح ذلك للشركاء بدء مشروع قبل إعلان إصدار LTS، وذلك من خلال الدمج من android-mainline. بعد إنشاء فرع نواة مشترك جديد، يمكن للشركاء تغيير مصدر الدمج بسلاسة إلى الفرع الجديد.

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

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

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

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

قبل الإصدار 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
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

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

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

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

يتم عرض المستوى الأعلى من التسلسل الهرمي المشترك للنواة في الشكل 1.

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

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

لاحِظ أنّ نواة Android المشتركة الجديدة android14-6.1 قد تشعّبت من android-mainline في عام 2022. في 2023، عندما تم الإعلان عن قناة الدعم الطويل الأمد (LTS) التالية، تفرع السمة 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).

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

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

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

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

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

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

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

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

مرحلة التثبيت

عندما يتم الإعلان عن اكتمال ميزة فرع KMI في ACK، يدخل الفرع في مرحلة الاستقرار (التي تم تصنيفها على أنّها مستقرة في الشكل 2). ما زالت ميزات الشركاء وإصلاحات الأخطاء متاحة، ولكن تم تفعيل ميزة تتبُّع 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 للأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android والإصدارات الأحدث. بما أنّ إصدار نظام 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 نادرة جدًا.

التوافق بين النواة (kernel)

إنّ متطلبات التوافق بين نواة نظام التشغيل في مجموعة الإصدارات الطويلة المدى نفسها ستتغيّر اعتبارًا من نواة 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).

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

يعرض هذا الجدول إصدارات النواة المتوافقة مع التطبيق والتي تم اختبارها مع كل إصدار من أنظمة التشغيل 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
android-4.19-stable
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
android-4.19-stable
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
android-4.19-stable
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
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

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

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

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

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

يعرض هذا الجدول القيم الدائمة لحِزم ACK المتوافقة:

فرع ACK تاريخ
الإطلاق
الدعم
الفترة منذ
(سنوات)
EOL
android-4.19-stable 2018-10-22 6 2025-01-01
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 في اختبار Presbumit في التحقق من رمز النواة الشائعة في Android.

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

الاختبار لمدة 0 يوم

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

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

النواة الشائعة لنظام التشغيل Android إصدارات نظام Android الأساسي مجموعات الاختبار
الهاتف الرئيسي 15 14 13 12 11 10 LKFT بروتوكول KernelCI قبل الإرسال بعد الإرسال 0-day
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-4.19-stable

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

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

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