معلومات الإصدار في خصائص AVB

لدعم ربط إصدار Keymaster، من المتوقع أن يوفر برنامج تحميل التشغيل للجهاز إصدار نظام التشغيل (OS) ومستوى تصحيح الأمان لكل قسم. إصدار نظام التشغيل ومستوى تصحيح الأمان هما مفتاحان منفصلان -> أزواج القيمة في خصائص 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[.BC]، على سبيل المثال، "12" أو "12.0.0":

  • ج: الإصدار الرئيسي
  • B: إصدار ثانوي، ويكون الإعداد الافتراضي هو الصفر عند غيابه
  • C: إصدار ثانوي، الإعداد الافتراضي هو صفر عند غيابه

تنسيق 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'
  • VENDOR_SECURITY_PATCH := 2022-02-05 يتم إنشاؤه
    • com.android.build.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'
  • BOOT_OS_VERSION := abc
    • com.android.build.boot.os_version -> 'abc'
  • 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;