Per supportare il vincolo della versione di Keymaster, il bootloader del dispositivo deve fornire la versione del sistema operativo (OS) e il livello della patch di sicurezza per ogni partizione. La versione del sistema operativo e il livello della patch di sicurezza sono due coppie chiave-valore distinte nelle proprietà AVB. Ad 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ò recuperare queste proprietà AVB da un'immagine vbmeta utilizzando
avb_property_lookup()
.
È possibile caricare più immagini vbmeta da
avb_slot_verify()
e vengono memorizzate nel
AvbSlotVerifyData**
out_data
parametro di output.
Il formato predefinito delle informazioni sulla versione
Per impostazione predefinita, il sistema di compilazione Android utilizza 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[.B.C],
ad esempio 12
o 12.0.0
:
- A: versione principale
- B: versione secondaria, il valore predefinito è zero se non è presente
- C: versione secondaria, il valore predefinito è zero se non è presente
Il formato di com.android.build.${partition}.security_patch
è AAAA-MM-GG.
Per impostazione predefinita, il sistema di build genera com.android.build.${partition}.security_patch
per le partizioni system
, system_ext
e product
. Il produttore del dispositivo deve impostare BOOT_SECURITY_PATCH
, VENDOR_SECURITY_PATCH
e altri patch per le partizioni non di sistema. Ad esempio:
BOOT_SECURITY_PATCH := 2022-01-05
generacom.android.build.boot.security_patch -> '2022-01-05'
VENDOR_SECURITY_PATCH := 2022-02-05
generacom.android.build.vendor.security_patch -> '2022-02-05'
Il produttore del dispositivo può impostare *_SECURITY_PATCH
su
$(PLATFORM_SECURITY_PATCH)
se aggiorna 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)
Specificare informazioni sulla versione personalizzate
A partire da Android 13, ogni build del dispositivo può avere un valore personalizzato per la versione del sistema operativo, che può essere riconosciuto dal bootloader del dispositivo. Ad esempio:
SYSTEM_OS_VERSION := 12.0.0
generacom.android.build.system.os_version -> '12.0.0'
BOOT_OS_VERSION := a.b.c
generacom.android.build.boot.os_version -> 'a.b.c'
VENDOR_OS_VERSION := 12.0.1
generacom.android.build.vendor.os_version -> '12.0.1'
Informazioni sulla versione obsoleta nell'intestazione dell'immagine di avvio
A partire da Android 9, il collegamento delle versioni di Keymaster suggerisce di rimuovere os_version
dall'intestazione boot.img
.
Per fare un confronto, qui viene descritto anche l'utilizzo obsoleto per ottenere le informazioni sulla versione dall'intestazione dell'immagine di avvio. Tieni presente che il campo
os_version
nell'intestazione di avvio combina la versione del sistema operativo e il livello della patch di sicurezza in un
intero non firmato a 32 bit. Inoltre, 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;