لدعم ربط إصدار Keymaster، من المفترض أن يقدّم برنامج إقلاع الجهاز إصدار نظام التشغيل ومستوى تصحيح الأمان لكل قسم. إنّ إصدار نظام التشغيل ومستوى رمز تصحيح الأمان هما زوجان منفصلان من قيم المفتاح في خصائص AVB. مثلاً:
com.android.build.system.os_version -> '12'
com.android.build.system.security_patch -> '2022-02-05'
com.android.build.vendor.os_version -> '12'
com.android.build.vendor.security_patch -> '2022-02-05'
com.android.build.boot.os_version -> '12'
com.android.build.boot.security_patch -> '2022-02-05'
يمكن لبرنامج تشغيل الجهاز الحصول على خصائص AVB هذه من صورة vbmeta باستخدام
avb_property_lookup()
.
يمكن تحميل عدة صور vbmeta من خلال avb_slot_verify()
ويتم تخزينها في معلَمة إخراج AvbSlotVerifyData**
out_data
.
التنسيق التلقائي لمعلومات الإصدار
يستخدم نظام إنشاء Android تلقائيًا التنسيق التالي لإصدار نظام التشغيل والتصحيح الأمني، على التوالي.
تنسيق com.android.build.${partition}.os_version
هو A[.B.C]،
على سبيل المثال، 12
أو 12.0.0
:
- أ: رقم الإصدار الرئيسي
- B: رقم الإصدار الثانوي، ويتم ضبطه تلقائيًا على صفر عند عدم توفّره
- ج: الإصدار الفرعي الثانوي، القيمة التلقائية هي صفر عند عدم توفّره
التنسيق com.android.build.${partition}.security_patch
هو YYYY-MM-DD.
ينشئ نظام الإنشاء تلقائيًا ملفًا تعريفيًا لملف التمهيد
com.android.build.${partition}.security_patch
للأقسام system
system_ext
وproduct
. من المفترض أن تضبط الشركة المصنّعة للجهاز BOOT_SECURITY_PATCH
وVENDOR_SECURITY_PATCH
وغيرها من التصحيحات على الأقسام غير النظامية. مثلاً:
BOOT_SECURITY_PATCH := 2022-01-05
تُنشئcom.android.build.boot.security_patch -> '2022-01-05'
- يتم إنشاء
- من قِبل "
com.android.build.vendor.security_patch -> '2022-02-05'
VENDOR_SECURITY_PATCH := 2022-02-05
"
يمكن للشركة المصنّعة للجهاز ضبط *_SECURITY_PATCH
على $(PLATFORM_SECURITY_PATCH)
إذا كانت تحدِّث دائمًا جميع الأقسام إلى الإصدار الذي يتضمّن مستوى تصحيح الأمان نفسه.
BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
تحديد معلومات الإصدار المخصص
بدءًا من Android 13، يمكن أن يتضمّن كل إصدار من الجهاز قيمة مخصّصة لإصدار نظام التشغيل يمكن أن يتعرّف عليها برنامج تشغيل الجهاز. مثلاً:
SYSTEM_OS_VERSION := 12.0.0
تُنشئcom.android.build.system.os_version -> '12.0.0'
- يتم إنشاء
- من قِبل "
com.android.build.boot.os_version -> 'a.b.c'
BOOT_OS_VERSION := a.b.c
" VENDOR_OS_VERSION := 12.0.1
تُنشئcom.android.build.vendor.os_version -> '12.0.1'
معلومات الإصدار القديم في عنوان صورة التمهيد
بدءًا من Android 9، تقترح
ربط الإصدار
من Keymaster إزالة os_version
من عنوان boot.img
.
للمقارنة، يتم أيضًا هنا وصف الاستخدام القديم للحصول على معلومات الإصدار من عنوان
صورة التمهيد. يُرجى العِلم أنّ الحقل
os_version
في عنوان التمهيد يجمع بين إصدار نظام التشغيل ومستوى رمز تصحيح الأمان في
عدد صحيح غير موقَّت بسعة 32 بت. وتفترض هذه الآلية أنّه سيتم تعديل كل الصور معًا، وهو إجراء قديم بعد تجميع الأقسام في Project Treble.
// Operating system version and security patch level.
// For version "A.B.C" and patch level "Y-M-D":
// (7 bits for each of A, B, C; 7 bits for (Y-2000), 4 bits for M)
// A = os_version[31:25]
// B = os_version[24:18]
// C = os_version[17:11]
// Y = 2000 + os_version[10:4]
// M = os-version[3:0]
uint32_t os_version;