Информация о версии в свойствах AVB

Для поддержки привязки версии Keymaster загрузчик устройства должен предоставить версию операционной системы (ОС) и уровень исправлений безопасности для каждого раздела. Версия ОС и уровень исправления безопасности — это две отдельные пары ключ -> значение в свойствах AVB . например,

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

Загрузчик устройства может получить эти свойства AVB из образа vbmeta с помощью avb_property_lookup() . Несколько изображений vbmeta могут быть загружены с помощью avb_slot_verify() и будут сохранены в выходном параметре AvbSlotVerifyData** out_data .

Формат информации о версии по умолчанию

По умолчанию система сборки Android будет использовать следующий формат для версии ОС и исправления безопасности соответственно.

Формат com.android.build.${partition}.os_version — A[.BC], например, «12» или «12.0.0»:

  • A: основная версия
  • B: дополнительная версия, по умолчанию равна нулю, если она отсутствует.
  • C: младшая версия, по умолчанию равна нулю, если она отсутствует.

Формат com.android.build.${partition}.security_patch — ГГГГ-ММ-ДД.

По умолчанию система сборки генерирует com.android.build.${partition}.security_patch только для разделов system , system_ext и product . Ожидается, что производитель устройства установит BOOT_SECURITY_PATCH , VENDOR_SECURITY_PATCH и т. д. для несистемных разделов. например,

  • BOOT_SECURITY_PATCH := 2022-01-05
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 генерирует
    • com.android.build.vendor.security_patch -> '2022-02-05'

Производитель устройства может установить для *_SECURITY_PATCH значение $(PLATFORM_SECURITY_PATCH) , если он всегда будет обновлять все разделы до версии с тем же уровнем исправлений безопасности.

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

Указание информации о пользовательской версии

Начиная с Android 13, каждая сборка устройства может иметь собственное значение версии ОС, которое может распознаваться загрузчиком устройства. например,

  • SYSTEM_OS_VERSION := 12.0.0 генерирует
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := abc
    • com.android.build.boot.os_version -> 'abc'
  • VENDOR_OS_VERSION := 12.0.1 генерирует
    • com.android.build.vendor.os_version -> '12.0.1'

Информация об устаревшей версии в заголовке загрузочного образа.

Начиная с Android 9, привязка версии Keymaster предлагает удалить os_version из заголовка boot.img .

Для сравнения здесь также описан устаревший способ получения информации о версии из заголовка загрузочного образа. Обратите внимание, что поле os_version в заголовке загрузки объединяет версию ОС и уровень исправлений безопасности в 32-битное целое число без знака. И этот механизм предполагает, что все образы будут обновляться вместе, что устарело после модульности разделов в 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;