مخطّط تحديد الإصدارات في GKI

تصف هذه الصفحة مخطط تحديد إصدارات صور النواة العامة (GKIs). تحتوي صورة Kernel Generic (GKI) على معرّف فريد يُعرف باسم إصدار kernel. يتألّف إصدار النواة من إصدار واجهة وحدة النواة (KMI) والمستوى الفرعي. يرتبط إصدار kernel بالصورة التي يتم إصدارها، في حين يمثّل إصدار KMI الواجهة التي تم إنشاء الإصدار منها. يمكن لإصدار 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 تصف واجهة وحدة النواة (KMI) بين GKI و وحدات نواة قابلة للتحميل ديناميكيًا (DLKM).
مستوى فرعي y 42 تصف ترتيب إطلاق إصدارات النواة في نفس إصدار KMI.

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

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

لمعرفة التفاصيل، يُرجى الاطّلاع على نظام التشغيل Linux. Kernel Makefiles (ابحث عن "KERNELRelease")

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

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

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

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

هذا هو رقم إصدار Android (الحلوى) الذي ترتبط به النواة (kernel) معهم.

عند مقارنة الحقل 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

الوصف

إصدار النواة هو المعرّف الفريد لإصدار 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 نفسه، سينفِّذان واجهة ملف kernel module نفسها. تتوافق أيضًا ألعاب DLKM المتوافقة مع أحدها. مع الآخر.

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

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

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

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

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

وهذا يعني أنّه إذا لم يتغيّر إصدار 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. عند استخراج معلومات النواة بشكل أكثر رسمية، يتم تحليل ناتج 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 واجهة C++ لتحليل إصدار النواة أو سلسلة إصدار KMI. للحصول على قائمة بواجهات برمجة التطبيقات التي تعرضها libkver، يُرجى الاطّلاع على packages/modules/Gki/libkver/include/kver.

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

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

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

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

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

تشغيل إصدار الصورة في البيانات الوصفية عبر الهواء

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

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

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

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