مخطط إصدارات GKI

تصف هذه الصفحة مخطط تحديد إصدارات صور النواة العامة (GKIs). تحتوي صورة Kernel Generic (GKI) على معرّف فريد يُعرف باسم إصدار kernel. يتألّف إصدار النواة من إصدار واجهة وحدة النواة (KMI) والمستوى الفرعي. يرتبط إصدار kernel بالصورة التي يتم إصدارها، في حين يمثّل إصدار KMI الواجهة التي تم إنشاء الإصدار منها. يمكن أن يتوافق إصدار KMI مع إصدارات متعددة من النواة. يرتبط إصدار kernel بإصدار واحد فقط من KMI. في حال الحاجة إلى تغيير واجهة وحدة النواة (KMI)، يتم تكرار إصدار خوارزمية KMI ليعكس التغيير في إصدار خوارزمية KMI.

ملخّص البنود

يلخِّص الجدول التالي المصطلحات المهمة المستخدَمة في هذه الصفحة وفيما يتعلّق بآخر المعلومات حول "مؤشر أداء Google للتسويق".

الاسم الرمز مثال الوصف
إصدار النواة w.x.y-zzz-k-suffix 5.4.42-android12-0-foo المعرّف الفريد لإصدار GKI هذه هي القيمة التي يعرضها uname.
إصدار KMI w.x-zzz-k 5.4-android12-0 يصف هذا القسم واجهة وحدة ال kernel (KMI) بين GKI و وحدات kernel القابلة للتحميل ديناميكيًا (DLKM).
المستوى الفرعي y 42 يصف ترتيب إصدارات kernel ضمن إصدار KMI نفسه.

يسرد الجدول التالي عبارات أخرى ذات صلة كمرجع.

الاسم الرمز مثال الوصف
w.x.y w.x.y 5.4.42

لمعرفة التفاصيل، يُرجى الاطّلاع على Linux ملفّات Makefile الخاصة بالنواة (ابحث عن KERNELRELEASE).

يتم استخدام w.x.y مباشرةً في هذا المستند. ويُشار إلى ذلك أيضًا باسم رقم الإصدار المكوّن من ثلاثة أجزاء. إنّ المصطلح المستخدَم في VINTF، وهو إصدار kernel، قد يتسبب في حدوث التباس مع عبارات أخرى، خاصةً w.

يُشار إلى هذا المتغيّر باسم kernel_version_tuple في libkver.

يجب ألا يتم تقليل هذه المجموعة الثلاثية من خلال أي تحديثات، بما في ذلك التحديثات من خلال OTA أو الإصدار الرئيسي.

فرع النواة zzz-w.x android12-5.4 تُستخدَم هذه العبارة في أنواع فروع النواة الشائعة.
الإصدار w 5 لا يتم استخدام هذا المصطلح في هذا المستند. يُشار إلى هذا المتغيّر باسم version في libkver.
مستوى التصحيح x 4 لا يتم استخدام هذا المصطلح في هذا المستند. يُشار إلى هذا المتغيّر باسم patch_level في libkver.
إصدار Android zzz android12

هذا هو رقم إصدار Android (dessert) المرتبط بالنواة.

عند مقارنة الحقل AndroidRelease، يتم استخراج الجزء الرقمي من السلسلة لإجراء المقارنة.

يجب ألا ينخفض رقم إصدار Android بعد إجراء أي تحديثات، بما في ذلك التحديثات عبر الهواء أو التحديثات الرئيسية.

إنشاء نموذج KMI k 0

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

يبدأ رقم إنشاء مفتاح KMI بالرقم 0.

تصميم تحديد الإصدار

إصدار النواة

التعريف

بالنسبة إلى الأجهزة التي يتم شحنها مع GKI، يتم تحديد إصدار النواة على النحو التالي:

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديد إصدار kernel من الجهاز.

فيما يلي مثال على إصدار النواة.

5.4.42-android12-0-00544-ged21d463f856

الوصف

إصدار kernel هو المعرّف الفريد لإصدار GKI. إذا كان لدى اثنين من ثنائيات GKI نفس إصدار النواة، يجب أن يكونا متطابقين من ناحية البايت.

يتألّف إصدار kernel من إصدار KMI ومستوى فرعي ولاحقة. لأغراض هذا المستند، يتم تجاهل اللاحقة بعد إنشاء مفتاح KMI.

إصدار KMI

التعريف

يتم تعريف إصدار KMI على النحو التالي:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

يُرجى العلم أنّ المستوى الفرعي y ليس جزءًا من إصدار KMI. في المثال التالي، في إصدار النواة، يكون إصدار KMI هو:

5.4-android12-0

الوصف

يصف إصدار KMI واجهة وحدة ال kernel (KMI) بين GKI و وحدات kernel القابلة للتحميل ديناميكيًا (DLKM).

إذا كان هناك إصداران من النواة لديهما إصدار KMI نفسه، فسيتم تنفيذ واجهة وحدة النواة نفسها. إنّ أدوات إدارة حملة الأداء المحسَّن (DLKM) المتوافقة مع أحدهما تكون متوافقة أيضًا مع الآخر.

يجب عدم خفض إصدار KMI من خلال أي تحديثات عبر الهواء.

المستوى الفرعي

يصف المستوى الفرعي y ترتيب إصدارات النواة ضمن إصدار KMI نفسه.

بالنسبة إلى إصدارَي نواة يتضمّنان إصدار KMI نفسه ولكنهما يتضمّنان المستوى الفرعي Y1 و Y2 على التوالي:

  • إذا كان العام Y1 أصغر من أو يساوي العام Y2، يمكن للجهاز الذي يعمل بالإصدار Y1 تلقّي تحديث إلى الإصدار Y2.
  • إذا كان العام 1 أكبر من العام 2، لا يمكن تحديث جهاز يعمل بالإصدار العام 1 إلى الإصدار العام 2.

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

تحديد إصدار النواة من جهاز

يمكن العثور على إصدار النواة الكامل من خلال تنفيذ uname -r أو uname(2) مع المقتطف البرمجي التالي:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

في ما يلي مثال على الإخراج:

5.4.42-android12-0-00544-ged21d463f856

لأغراض هذا المستند، يتم تجاهل أي شيء بعد إنشاء KMI عند استخراج معلومات kernel. بشكل أكثر رسمية، يتم تحليل ناتج uname -r باستخدام التعبير العادي التالي (على افتراض أنّ zzz يبدأ دائمًا بـ "android"):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

يمكن أن تتضمّن المعلومات التي يتم تجاهلها معلومات مثل رقم الإصدار في ci.android.com وعدد التصحيحات التي تم تطبيقها على نواة الإصدار الأساسي وعلامات SHA لعمليات الربط في git.

libkver

توفّر المكتبة libkver واجهة C++ لتحليل إصدار النواة أو سلسلة إصدار KMI. للحصول على قائمة بواجهات برمجة التطبيقات التي يعرضها libkver، يمكنك الاطّلاع على packages/modules/Gki/libkver/include/kver.

عمليات التحقّق من VINTF

بالنسبة إلى Android 11 أو الإصدارات الأقدم، يحدّد المصنّعون جزء إصدار Android من إصدار KMI يدويًا في بيان الجهاز. لمعرفة التفاصيل، يُرجى الاطّلاع على قواعد مطابقة نواة VINTF.

بدءًا من Android S، يمكن استخراج جزء إصدار Android من إصدار KMI من النواة وإدراجه في بيان الجهاز في وقت الإنشاء.

وبما أنّ متطلبات ضبط إعدادات kernel لا تتغيّر بشكل عام، ليس هناك حاجة إلى ترميز k ضمن مصفوفة التوافق. ومع ذلك، في حال الحاجة إلى تغيير متطلبات إعدادات kernel، تأكَّد مما يلي:

  • تمت إزالة الشرط المقابل من مصفوفة التوافق.
  • تتم إضافة المزيد من اختبارات VTS للتحقق من المتطلبات الجديدة المشروطة لإنشاء خوارزمية KMI.

إصدار صورة التمهيد في البيانات الوصفية لميزة "التحديث عبر الهواء"

حتى في حال تم تعديل صورة التشغيل من خلال تحديث عبر الهواء، يجب أن يتم تغليفها بتنسيق حمولة البيانات عبر الهواء، payload.bin. تشفِّر حمولة OTA حقل version لكل قسم. عندما يعالج update_engine حمولة OTA، يقارن هذا الحقل لضمان عدم الرجوع إلى إصدار أقدم من القسم.

لتجنُّب حدوث أي التباس، يُطلق على الحقل version الخاص بقسم التمهيد في البيانات الوصفية لنظام التشغيل OTA اسم boot image version.

بما أنّ قرص RAM يتم إنشاؤه دائمًا من نقطة الصفر، يكفي استخدام الطابع الزمني لقرص RAM لوصف الصورة التي يتم تشغيلها بالكامل. ما مِن حاجة إلى ترميز إصدار النواة في إصدار صورة التمهيد، ما لم تكن بصدد دمج صورة تمهيد قديمة مع ملف ثنائي جديد للنواة في المستقبل.

قبل إجراء تحديث عبر شبكة Wi-Fi، يتحقّق برنامج OTA من إصدار صورة التمهيد بالطريقة نفسها التي يتحقّق بها من أي قسم آخر.