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

توضّح هذه الصفحة نظام تحديد الإصدارات لصور النواة العامة (GKI). تحتوي صورة النواة العامة (GKI) على معرّف فريد يُعرف باسم إصدار النواة. يتألف إصدار النواة من إصدار واجهة وحدة النواة (KMI) والمستوى الفرعي. يخصّ إصدار النواة الصورة التي يتم طرحها، بينما يمثّل إصدار واجهة وحدة النواة (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 android12

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

عند مقارنة حقل 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) نفسه، فهما ينفّذان واجهة وحدة النواة (KMI) نفسها. تكون وحدات النواة القابلة للتحميل ديناميكيًا (DLKM) المتوافقة مع إحدى واجهات وحدة النواة (KMI) متوافقة أيضًا مع الأخرى.

يجب ألا يتم تقليل إصدار واجهة وحدة النواة (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 باستخدام التعبير المنتظم التالي regex(بافتراض أنّ 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) من النواة وإدخاله إلى بيان الجهاز في مدّة التصميم.

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

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

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

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

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

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

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