توضّح هذه الصفحة مخطّط إصدار "صور النواة العامة" (GKI). تحتوي صورة Kernel Generic (GKI) على معرّف فريد يُعرف باسم إصدار kernel. يتألّف إصدار النواة من إصدار واجهة وحدة النواة (KMI) والمستوى الفرعي. يرتبط إصدار الإصدار بالصورة التي يتم إصدارها، في حين يمثّل إصدار KMI الواجهة التي تم إنشاء الإصدار منها. يمكن أن يتوافق إصدار KMI مع إصدارات متعددة من النواة. يرتبط إصدار kernel بإصدار واحد فقط من 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 (الحلوى) المرتبط بالنواة.
عند مقارنة الحقل يجب ألا ينخفض رقم إصدار 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 نفسه، فسيتم تنفيذ واجهة وحدة النواة نفسها. إنّ أدوات إدارة الخدمات اللوجستية الرقمية التي تتوافق مع إحدى الخدمتَين متوافقة أيضًا مع الأخرى.
يجب عدم خفض إصدار KMI من خلال أي تحديثات عبر الهواء.
المستوى الفرعي
يصف المستوى الفرعي y
ترتيب إصدارات النواة ضمن
إصدار KMI نفسه.
بالنسبة إلى إصدارَي نواة يتضمّنان إصدار KMI نفسه ولكنهما يتضمّنان المستوى الفرعي Y1 و Y2 على التوالي:
- إذا كان العام Y1 أصغر من أو يساوي العام Y2، يمكن للجهاز الذي يعمل بالإصدار Y1 تلقّي تحديث إلى الإصدار Y2.
- إذا كان العام 1 أكبر من العام 2، لا يمكن تحديث جهاز يعمل بالإصدار 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
عند استخراج معلومات 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، تأكَّد مما يلي:
- تتم إزالة الشرط المقابل من مصفوفة التوافق.
- تتم إضافة اختبارات إضافية لفحص المتطلبات الجديدة المشروطة بإنشاء مفتاح KMI.
إصدار صورة التمهيد في البيانات الوصفية لميزة "التحديث عبر الهواء"
حتى إذا تم تحديث صورة التمهيد من خلال تحديث عبر الهواء، يجب
تغليفها بتنسيق حمولة OTA، payload.bin
. تُشفِّر حمولة OTA حقل
version
لكل قسم. عندما يعالج update_engine
حمولة OTA،
يقارن هذا الحقل لضمان عدم الرجوع إلى إصدار أقدم من القسم.
لتجنُّب حدوث أي التباس، يُطلق على الحقل version
الخاص بقسم التمهيد في البيانات الوصفية لنظام التشغيل OTA
اسم boot image version
.
بما أنّه يتم إنشاء ملف ramdisk دائمًا من البداية، يكفي استخدام ramdisk الطوابع الزمنية لوصف صورة التمهيد بالكامل. ما مِن حاجة إلى ترميز إصدار النواة في إصدار صورة التمهيد، ما لم تكن بصدد دمج صورة تمهيد قديمة مع ملف ثنائي جديد للنواة في المستقبل.
قبل إجراء تحديث عبر شبكة Wi-Fi، يتحقّق برنامج OTA من إصدار صورة التمهيد بالطريقة نفسها التي يتحقّق بها من أي قسم آخر.