AVB mülklerindeki sürüm bilgileri

KeyMint (eski adıyla Keymaster) sürüm bağlamayı desteklemek için, cihaz önyükleyicisinin her bölüm için işletim sistemi (OS) sürümünü ve güvenlik yaması seviyesini sağlaması beklenir. İşletim sistemi sürümü ve güvenlik yaması düzeyi, AVB özelliklerinde iki ayrı anahtar/değer çiftidir. Örneğin:

  • 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'

Cihazın önyükleyicisi, avb_property_lookup() kullanarak bu AVB özelliklerini bir vbmeta görüntüsünden alabilir. Birden fazla vbmeta resmi avb_slot_verify() tarafından yüklenebilir ve AvbSlotVerifyData** out_data çıkış parametresinde depolanır.

Sürüm bilgilerinin varsayılan biçimi

Android derleme sistemi, varsayılan olarak işletim sistemi sürümü ve güvenlik yaması için sırasıyla aşağıdaki biçimi kullanır.

com.android.build.${partition}.os_version biçimi A[.B.C] şeklindedir. Örneğin, 12 veya 12.0.0:

  • A: ana sürüm
  • B: küçük sürüm, yoksa varsayılan olarak sıfır değerini alır
  • C: alt küçük sürüm, yoksa varsayılan olarak sıfır değerini alır

com.android.build.${partition}.security_patch biçimi YYYY-AA-GG şeklindedir.

Derleme sistemi, varsayılan olarak system, system_ext ve product bölümleri için com.android.build.${partition}.security_patch oluşturur. Cihaz üreticisinin, sistem dışı bölümler için BOOT_SECURITY_PATCH, VENDOR_SECURITY_PATCH ve diğer yamaları ayarlaması beklenir. Örneğin:

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

Cihaz üreticisi, tüm bölümleri her zaman aynı güvenlik yama düzeyine sahip sürüme güncelliyorsa *_SECURITY_PATCH değerini $(PLATFORM_SECURITY_PATCH) olarak ayarlayabilir.

  • BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
  • VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)

Özel sürüm bilgilerini belirtme

Android 13'ten itibaren her cihaz derlemesi, cihaz bootloader'ı tarafından tanınabilen işletim sistemi sürümü için özel bir değere sahip olabilir. Örneğin:

  • SYSTEM_OS_VERSION := 12.0.0 oluşturur
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := a.b.c oluşturur
    • com.android.build.boot.os_version -> 'a.b.c'
  • VENDOR_OS_VERSION := 12.0.1 oluşturur
    • com.android.build.vendor.os_version -> '12.0.1'

Önyükleme görüntüsü başlığındaki eski sürüm bilgileri

Android 9 ve sonraki sürümlerde, Keymaster 4'ün sürüm bağlama özelliği, os_version öğesinin boot.img üstbilgisinden kaldırılmasını önerir.

Karşılaştırma için, sürüm bilgilerini önyükleme görüntüsü üstbilgisinden almanın eski kullanımı da burada açıklanmaktadır. Önyükleme üstbilgisindeki os_version alanının hem işletim sistemi sürümünü hem de güvenlik yaması düzeyini 32 bitlik işaretsiz bir tam sayı olarak birleştirdiğini unutmayın. Bu mekanizma, tüm görüntülerin birlikte güncelleneceğini varsayar. Bu durum, Project Treble'da bölüm modülerleştirme işleminden sonra geçerliliğini yitirmiştir.

// 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;