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

  • أ: الإصدار الرئيسي
  • ب: الإصدار الثانوي، القيمة التلقائية هي صفر في حال عدم توفّره
  • 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 := 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 بت. وتفترض هذه الآلية أنّه سيتم تعديل كل الصور معًا، وهو إجراء قديم بعد تجميع الأقسام في 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;