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

لإتاحة ربط الإصدار في KeyMint (المعروفة سابقًا باسم 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'

معلومات الإصدار القديم في عنوان صورة التشغيل

في الإصدار 9 من نظام التشغيل Android والإصدارات الأحدث، تقترح ميزة ربط الإصدار في Keymaster 4 إزالة 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;