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

لدعم ربط إصدار 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:

  • أ: رقم الإصدار الرئيسي
  • ب: الإصدار الثانوي، القيمة التلقائية هي صفر في حال عدم توفّره
  • ج: الإصدار الفرعي الثانوي، التلقائي هو صفر عند عدم توفّره

التنسيق 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 := a.b.c تُنشئ
    • com.android.build.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;