Imágenes de recuperación

En dispositivos que no sean A/B, la imagen de recuperación debe contener información de una imagen de superposición de BLOB del árbol de dispositivos (DTB) o de la interfaz de configuración y energía avanzada (ACPI). Cuando estos dispositivos se inician en modo de recuperación, el bootloader puede cargar la imagen superpuesta que es compatible con la imagen de recuperación. Los dispositivos que admiten actualizaciones A/B (sin interrupciones) deben usar la recuperación como inicio en lugar de una partición de recuperación independiente (para obtener más información, consulta Cómo implementar actualizaciones A/B).

Las opciones para incluir un DTBO/ACPIO de recuperación como parte de la imagen de inicio/recuperación difieren entre las versiones de Android.

Lanzamiento Actualiza el esquema Cumplimiento de GKI Versión del encabezado de inicio (dispositivos de lanzamiento) Versión del encabezado de inicio (se están actualizando los dispositivos) Se requiere una imagen de recuperación dedicada
11 A/B,
A/B virtual
3* N/A No
A/B,
A/B virtual
No 2, 3 0, 1, 2, 3 No
No A/B 3 N/A
no A/B No 2, 3 0, 1, 2, 3
10 (Q) A/B N/A 2 0, 1, 2 No
no A/B N/A 2 0, 1, 2
9 (P) A/B N/A 1 0, 1 No
no A/B N/A 1 0, 1
8 (O) A/B N/A N/A (considera 0) N/A (considera 0) No
no A/B N/A N/A (considera 0) N/A (se considera 0)

* Dispositivos A/B con Android 11 o versiones posteriores, y con la imagen genérica del kernel (GKI) debe usar una versión principal del encabezado de inicio de 3 compatible con el inicio del proveedor partición.

Puntos clave:

  • Los dispositivos A/B no necesitan especificar una imagen de recuperación, ya que las actualizaciones A/B usan dos conjuntos de particiones (incluidos boot y dtbo) y cambian entre ellos durante las actualizaciones, lo que elimina la necesidad de una imagen de recuperación. Los dispositivos A/B pueden seguir usando una imagen de recuperación dedicada.

  • Los dispositivos que no son A/B que se inician con Android 11 o versiones posteriores y usan una versión 3 del encabezado de inicio deben especificar de forma explícita una versión 2 del encabezado de inicio para la imagen de recuperación por separado. Por ejemplo:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Para las arquitecturas que no admiten árboles de dispositivos, la imagen de recuperación Incluye una imagen ACPIO en lugar de una DTBO.

Información acerca de las imágenes de recuperación y las fallas de OTA

Para evitar fallas inalámbricas (OTA) en dispositivos que no son A/B, la imagen de recuperación debe ser autosuficiente e independiente de otras imágenes. Durante una actualización OTA, si se produce un problema después de que se ha actualizado la imagen superpuesta (pero antes de completando la actualización), el dispositivo intentará iniciarse en el Modo de recuperación para completar la actualización OTA. Sin embargo, debido a que la partición de superposición ya se actualización, puede ocurrir una discrepancia con la imagen de recuperación (que no se todavía).

Para evitar que la recuperación dependa de la partición de DTBO/ACPIO durante una actualización, los dispositivos que no sean de A/B que ejecutan Android 9 o versiones posteriores pueden especificar una imagen de DTBO/ACPIO de recuperación que contenga información de la imagen de superposición como una sección independiente en el formato de imagen de inicio (se debe usar una versión de encabezado de inicio de 1 o 2).

Cambios en la imagen de arranque

Para permitir que la imagen de recuperación contenga el DTBO o ACPIO de recuperación en dispositivos que no sean A/B que ejecutan Android 9 o versiones posteriores, actualiza la estructura de la imagen de inicio de la siguiente manera.

Sección de imagen de arranque Cantidad de páginas
Encabezado de inicio (1 página) 1
Kernel (páginas de l) l = (kernel_size + page_size - 1) de page_size
Ramdisk (m páginas) m = (ramdisk_size + page_size - 1) de page_size
bootloader de segunda etapa (n páginas) n = (second_size + page_size - 1) / page_size
DTBO o ACPIO de recuperación (o páginas) o = (recovery_[dtbo|acpio]_size + page_size - 1) de page_size

Para obtener detalles sobre los argumentos de la herramienta mkbootimg para especificar la versión del encabezado de la imagen de arranque y las rutas de acceso de la imagen superpuesta, consulta Control de versiones del encabezado de la imagen de arranque.

Implementa DTBO

Los dispositivos que no son A/B que ejecutan Android 9 o versiones posteriores pueden propagar la sección recovery_dtbo de la imagen de recuperación. Para incluir recovery_dtbo imagen en recovery.img, en el dispositivo BoardConfig.mk:

  • Establece la configuración BOARD_INCLUDE_RECOVERY_DTBO en true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Extiende la variable BOARD_MKBOOTIMG_ARGS para especificar la versión del encabezado de la imagen de arranque:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Asegúrate de que la variable BOARD_PREBUILT_DTBOIMAGE esté establecida en la ruta de acceso del Imagen de DTBO. El sistema de compilación de Android usa la variable para establecer el argumento recovery_dtbo de la herramienta mkbootimg durante la creación de la imagen de recuperación.

Si los valores BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS y Las variables BOARD_PREBUILT_DTBOIMAGE están configuradas correctamente, el sistema de compilación de Android incluye el DTBO especificado por la variable BOARD_PREBUILT_DTBOIMAGE en recovery.img

Implementa ACPIO

Pueden usar los dispositivos que no sean A/B y ejecuten Android 9 o versiones posteriores una imagen superpuesta de ACPIO (en lugar de una imagen DTBO) y se puede propagar sección recovery_acpio (en lugar de la sección recovery_dtbo) de la la imagen de recuperación. Para incluir la imagen recovery_acpio en recovery.img, en el BoardConfig.mk del dispositivo, haz lo siguiente:

  • Establece el elemento BOARD_INCLUDE_RECOVERY_ACPIO de configuración en true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Extiende la variable BOARD_MKBOOTIMG_ARGS para especificar la versión del encabezado de la imagen de arranque. La variable debe ser mayor o igual que 1 para admitir la recuperación de ACPIO.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Asegúrate de que la variable BOARD_RECOVERY_ACPIO esté establecida en la ruta de acceso del Imagen de ACPIO. El sistema de compilación de Android usa la variable para establecer el argumento recovery_acpio de la herramienta mkbootimg durante la creación de la imagen de recuperación.

Si los valores BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS y Las variables BOARD_RECOVERY_ACPIO están configuradas correctamente, el sistema de compilación de Android incluye el valor ACPIO especificado por la variable BOARD_RECOVERY_ACPIO en recovery.img