כדי לתמוך בקישור גרסאות של 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
:
- א: הגרסה הראשית
- 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 מציע להסיר את 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;