Per supportare l'associazione della versione di Keymaster, è previsto che il bootloader del dispositivo fornisca la versione del sistema operativo (OS) e il livello di patch di sicurezza per ciascuna partizione. La versione del sistema operativo e il livello della patch di sicurezza sono due coppie chiave -> valore separate nelle proprietà AVB . per esempio,
-
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'
Il bootloader del dispositivo può ottenere le proprietà AVB da un'immagine vbmeta tramite avb_property_lookup()
. Più immagini vbmeta possono essere caricate da avb_slot_verify()
e verranno archiviate nel parametro di output AvbSlotVerifyData**
out_data
.
Il formato predefinito delle informazioni sulla versione
Per impostazione predefinita, il sistema di build Android utilizzerà il seguente formato rispettivamente per la versione del sistema operativo e la patch di sicurezza.
Il formato di com.android.build.${partition}.os_version
è A[.BC], ad esempio, '12' o '12.0.0':
- R: versione principale
- B: versione minore, il valore predefinito è zero quando è assente
- C: versione sub-minore, il valore predefinito è zero quando è assente
Il formato di com.android.build.${partition}.security_patch
è AAAA-MM-GG.
Per impostazione predefinita, il sistema di compilazione genererà solo com.android.build.${partition}.security_patch
per le partizioni system
, system_ext
e product
. Si prevede che il produttore del dispositivo imposti BOOT_SECURITY_PATCH
, VENDOR_SECURITY_PATCH
, ecc., per le partizioni non di sistema. per esempio,
-
BOOT_SECURITY_PATCH := 2022-01-05
genera-
com.android.build.boot.security_patch -> '2022-01-05'
-
-
VENDOR_SECURITY_PATCH := 2022-02-05
genera-
com.android.build.vendor.security_patch -> '2022-02-05'
-
Il produttore del dispositivo può impostare *_SECURITY_PATCH
su $(PLATFORM_SECURITY_PATCH)
se aggiornerà sempre tutte le partizioni alla versione con lo stesso livello di patch di sicurezza.
-
BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
-
VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
Specifica delle informazioni sulla versione personalizzata
A partire da Android 13, ogni build del dispositivo può avere un valore personalizzato per la versione del sistema operativo che può essere riconosciuta dal bootloader del dispositivo. per esempio,
-
SYSTEM_OS_VERSION := 12.0.0
genera-
com.android.build.system.os_version -> '12.0.0'
-
-
BOOT_OS_VERSION := abc
genera-
com.android.build.boot.os_version -> 'abc'
-
-
VENDOR_OS_VERSION := 12.0.1
genera-
com.android.build.vendor.os_version -> '12.0.1'
-
Le informazioni sulla versione obsoleta nell'intestazione dell'immagine di avvio
A partire da Android 9, l'associazione della versione di Keymaster suggerisce di rimuovere os_version
dall'intestazione boot.img
.
Per confronto, qui viene descritto anche l'uso obsoleto di ottenere le informazioni sulla versione dall'intestazione dell'immagine di avvio. Tieni presente che il campo os_version nell'intestazione di avvio combina sia la versione del sistema operativo che il livello della patch di sicurezza in un numero intero senza segno a 32 bit. E questo meccanismo presuppone che tutte le immagini verranno aggiornate insieme, il che è obsoleto dopo la modularizzazione delle partizioni in 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;