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

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

ملخّص البنود

يلخص الجدول التالي المصطلحات المهمة المستخدمة في هذه الصفحة للحصول على تحديثات GKI.

الاسم الرمز مثال الوصف
إصدار النواة 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.

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

فرع النواة 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

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

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

5.4.42-android12-0-00544-ged21d463f856

الوصف

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

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

إصدار KMI

التعريف

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

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

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

5.4-android12-0

الوصف

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

في حالة وجود إصدارين من النواة لديهما إصدار KMI واحد، فإنهما يستخدمان نفس إصدار النواة وواجهة الوحدة. تتوافق أيضًا ألعاب 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 Commit.

ليبكفير

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

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

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

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

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

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

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

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

لتجنُّب حدوث أي التباس، يُرجى إدخال الحقل version لقسم بدء التشغيل في التحديث عبر الهواء بيانات التعريف تسمى boot image version.

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

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