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