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 de 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() . avb_slot_verify() puede cargar varias imágenes vbmeta y se almacenarán en el parámetro de salida out_data AvbSlotVerifyData** .

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 menor, por defecto es cero cuando está ausente
  • C: versión sub-menor, 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 las particiones system , system_ext y product . Se espera que el fabricante del dispositivo configure BOOT_SECURITY_PATCH , VENDOR_SECURITY_PATCH , etc., para particiones que no son 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 configurar *_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 el gestor de arranque del dispositivo puede reconocer. 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 inicio.

A partir de Android 9, el enlace de la versión de 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 inicio. 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 entero sin signo de 32 bits. Y este mecanismo supone que todas las imágenes se actualizarán juntas, lo cual queda obsoleto después de la modularización de la partición 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;