Informasi versi di properti AVB

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 menghasilkan
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 menghasilkan
    • com.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 menghasilkan
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := a.b.c menghasilkan
    • com.android.build.boot.os_version -> 'a.b.c'
  • VENDOR_OS_VERSION := 12.0.1 menghasilkan
    • com.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;