Información de versión en propiedades de AVB

Para admitir el enlace de la versión de Keymaster, se espera que el cargador de arranque del dispositivo proporcione la versión del sistema operativo (SO) y el nivel del parche de seguridad para cada partición. La versión del sistema operativo y el nivel del parche de seguridad son dos pares clave -> valor separados en las propiedades de AVB . p.ej,

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

El gestor de arranque del dispositivo puede obtener esas propiedades AVB de una imagen vbmeta a través de avb_property_lookup() . Se pueden cargar múltiples imágenes vbmeta mediante avb_slot_verify() y se almacenarán en el parámetro de salida AvbSlotVerifyData** out_data .

El formato predeterminado de la información de la versión.

De forma predeterminada, el sistema de compilación de Android utilizará el siguiente formato para la versión del sistema operativo y el parche de seguridad, respectivamente.

El formato de com.android.build.${partition}.os_version es A[.BC], por ejemplo, '12' o '12.0.0':

  • R: versión principal
  • B: versión secundaria, por defecto es cero cuando está ausente
  • C: versión secundaria, por defecto es cero cuando está ausente

El formato de com.android.build.${partition}.security_patch es AAAA-MM-DD.

De forma predeterminada, el sistema de compilación solo generará com.android.build.${partition}.security_patch para system , system_ext y particiones product . Se espera que el fabricante del dispositivo configure BOOT_SECURITY_PATCH , VENDOR_SECURITY_PATCH , etc., para particiones que no sean del sistema. p.ej,

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

El fabricante del dispositivo puede establecer *_SECURITY_PATCH en $(PLATFORM_SECURITY_PATCH) si siempre actualizará todas las particiones a la versión con el mismo nivel de parche de seguridad.

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

Especificación de información de versión personalizada

A partir de Android 13, cada compilación de dispositivo puede tener un valor personalizado para la versión del sistema operativo que puede reconocer el cargador de arranque del dispositivo. p.ej,

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

La información de la versión obsoleta en el encabezado de la imagen de arranque

A partir de Android 9, el enlace de la versión Keymaster sugiere eliminar os_version del encabezado boot.img .

A modo de comparación, aquí también se describe el uso obsoleto de obtener la información de la versión del encabezado de la imagen de arranque. Tenga en cuenta que el campo os_version en el encabezado de inicio combina la versión del sistema operativo y el nivel del parche de seguridad en un número entero de 32 bits sin firmar. Y este mecanismo asume que todas las imágenes se actualizarán juntas, lo cual está obsoleto después de la modularización de particiones en 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;