כדי לתמוך בקישור גרסה של KeyMint (לשעבר 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
.
פורמט ברירת המחדל של פרטי הגרסה
כברירת מחדל, מערכת ה-build של Android משתמשת בפורמט הבא לגרסת מערכת ההפעלה ולתיקון האבטחה, בהתאמה.
הפורמט של com.android.build.${partition}.os_version
הוא A[.B.C],
לדוגמה, 12
או 12.0.0
:
- A: הגרסה הראשית
- B: גרסה משנית, ברירת המחדל היא אפס אם היא לא מופיעה
- C: גרסה משנית, ברירת המחדל היא אפס אם היא לא מופיעה
הפורמט של com.android.build.${partition}.security_patch
הוא YYYY-MM-DD.
כברירת מחדל, מערכת ה-build יוצרת 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, לכל גרסת build של מכשיר יכול להיות ערך מותאם אישית של גרסת מערכת ההפעלה, שניתן לזיהוי על ידי טוען האתחול של המכשיר. לדוגמה:
-
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 4 מציע להסיר את 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;