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 pasangan nilai kunci terpisah di 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 mendapatkan 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 non-sistem. 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 untuk menghapus os_version
dari header boot.img
.
Sebagai perbandingan, penggunaan yang sudah 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;