Informasi Versi di properti AVB

Untuk mendukung pengikatan 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 kunci -> nilai yang terpisah di properti AVB . misalnya,

  • 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 bisa mendapatkan properti AVB tersebut dari gambar vbmeta melalui avb_property_lookup() . Beberapa gambar vbmeta dapat dimuat oleh avb_slot_verify() dan akan disimpan dalam parameter keluaran AvbSlotVerifyData** out_data .

Format default informasi versi

Secara default, sistem build Android akan menggunakan format berikut untuk versi OS dan patch keamanannya.

Format com.android.build.${partition}.os_version adalah A[.BC], misalnya '12' atau '12.0.0':

  • A: versi utama
  • B: versi minor, defaultnya nol jika tidak ada
  • C: versi sub-minor, defaultnya nol jika tidak ada

Format com.android.build.${partition}.security_patch adalah YYYY-MM-DD.

Secara default, sistem build hanya akan menghasilkan com.android.build.${partition}.security_patch untuk partisi system , system_ext dan product . Produsen perangkat diharapkan menyetel BOOT_SECURITY_PATCH , VENDOR_SECURITY_PATCH , dll., untuk partisi non-sistem. misalnya,

  • BOOT_SECURITY_PATCH := 2022-01-05 dihasilkan
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 dihasilkan
    • com.android.build.vendor.security_patch -> '2022-02-05'

Produsen perangkat dapat menyetel *_SECURITY_PATCH ke $(PLATFORM_SECURITY_PATCH) jika akan selalu memperbarui 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 khusus

Mulai Android 13, setiap build perangkat dapat memiliki nilai khusus untuk versi OS yang dapat dikenali oleh bootloader perangkat. misalnya,

  • SYSTEM_OS_VERSION := 12.0.0 menghasilkan
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := abc menghasilkan
    • com.android.build.boot.os_version -> 'abc'
  • VENDOR_OS_VERSION := 12.0.1 menghasilkan
    • com.android.build.vendor.os_version -> '12.0.1'

Informasi versi usang di header gambar boot

Mulai dari Android 9, pengikatan versi Keymaster menyarankan penghapusan os_version dari header boot.img .

Sebagai perbandingan, penggunaan yang sudah ketinggalan zaman untuk mendapatkan informasi versi dari header gambar boot juga dijelaskan di sini. Perhatikan bahwa bidang os_version di header boot menggabungkan versi OS dan tingkat patch keamanan menjadi bilangan bulat 32-bit yang tidak ditandatangani. Dan mekanisme ini mengasumsikan bahwa semua gambar akan diperbarui secara bersamaan, yang menjadi usang 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;