Untuk mendukung binding versi Keymaster, bootloader perangkat diharapkan menyediakan versi sistem operasi (OS) dan tingkat patch keamanan untuk setiap partisi. Versi OS dan tingkat patch keamanan adalah dua key-value pair yang terpisah dalam properti AVB. Contoh:
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'
Bootloader perangkat dapat memperoleh properti AVB tersebut dari image vbmeta menggunakan
avb_property_lookup()
.
Beberapa image vbmeta dapat dimuat oleh
avb_slot_verify()
dan disimpan di
parameter output
AvbSlotVerifyData**
out_data
.
Format default informasi versi
Secara default, sistem build Android menggunakan format berikut untuk versi OS dan patch keamanan.
Format com.android.build.${partition}.os_version
adalah A[.B.C],
misalnya, 12
atau 12.0.0
:
- A: versi utama
- B: versi minor, ditetapkan secara default ke nol jika tidak ada
- C: versi sub-minor, ditetapkan secara default ke nol jika tidak ada
Format com.android.build.${partition}.security_patch
adalah YYYY-MM-DD.
Secara default, sistem build menghasilkan
com.android.build.${partition}.security_patch
untuk partisi system
,
system_ext
, dan product
. Produsen perangkat
diharapkan menetapkan BOOT_SECURITY_PATCH
, VENDOR_SECURITY_PATCH
, dan patch lainnya
untuk partisi nonsistem. Contoh:
BOOT_SECURITY_PATCH := 2022-01-05
menghasilkancom.android.build.boot.security_patch -> '2022-01-05'
VENDOR_SECURITY_PATCH := 2022-02-05
menghasilkancom.android.build.vendor.security_patch -> '2022-02-05'
Produsen perangkat dapat menetapkan *_SECURITY_PATCH
ke
$(PLATFORM_SECURITY_PATCH)
jika selalu mengupdate semua partisi ke versi dengan tingkat patch keamanan
yang sama.
BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
Menentukan informasi versi kustom
Mulai Android 13, setiap build perangkat dapat memiliki nilai kustom untuk versi OS yang dapat dikenali oleh bootloader perangkat. Contoh:
SYSTEM_OS_VERSION := 12.0.0
menghasilkancom.android.build.system.os_version -> '12.0.0'
BOOT_OS_VERSION := a.b.c
menghasilkancom.android.build.boot.os_version -> 'a.b.c'
VENDOR_OS_VERSION := 12.0.1
menghasilkancom.android.build.vendor.os_version -> '12.0.1'
Informasi versi yang tidak berlaku lagi di header image booting
Mulai Android 9, binding versi Keymaster menyarankan penghapusan os_version
dari header boot.img
.
Sebagai perbandingan, penggunaan yang tidak digunakan lagi untuk mendapatkan informasi versi dari
header image booting juga dijelaskan di sini. Perhatikan bahwa kolom
os_version
di header booting menggabungkan versi OS dan level patch keamanan menjadi
bilangan bulat 32-bit yang tidak ditandatangani. Selain itu, mekanisme ini mengasumsikan bahwa semua image akan
diupdate secara bersamaan, yang sudah tidak digunakan lagi setelah modularisasi partisi di
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;