معلومات الإصدار في سمات 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:

  • أ: الإصدار الرئيسي
  • 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'
  • 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 ربط الإصدار تقترح إزالة os_version من عنوان boot.img.

للمقارنة، يتم أيضًا هنا وصف الاستخدام القديم للحصول على معلومات الإصدار من عنوان صورة التمهيد. يُرجى العِلم أنّ الحقل os_version في عنوان التمهيد يجمع بين إصدار نظام التشغيل ومستوى رمز تصحيح الأمان في عدد صحيح غير موقَّت بسعة 32 بت. وتفترض هذه الآلية أن جميع الصور سيتم يتم تعديلها معًا، وهي تصبح قديمة بعد تقسيم التقسيم في مشروع 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;