Для поддержки привязки версии 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;