En dispositivos que no sean A/B, la imagen de recuperación debe contener información de un BLOB del árbol de dispositivos (DTB) o Interfaz avanzada y configuración avanzada (ACPI). Cuando tales durante la recuperación, el bootloader puede cargar la imagen superpuesta es compatible con la imagen de recuperación. Dispositivos compatibles con A/B (perfecto) actualizaciones deberían usar la recuperación como inicio en lugar de un partición de recuperación separada (para obtener más información, consulta Cómo implementar A/B) Actualizaciones).
Las opciones para incluir un DTBO/ACPIO de recuperación como parte del inicio/recuperación difiere entre las versiones de Android.
Lanzamiento | Actualizar esquema | Cumplimiento de GKI | Versión del encabezado de inicio (lanzamiento de dispositivos) | 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 |
Sí | 3* | N/A | No |
A/B, A/B virtual |
No | 2, 3 | 0, 1, 2, 3 | No | |
no A/B | Sí | 3 | N/A | Sí | |
no A/B | No | 2, 3 | 0, 1, 2, 3 | Sí | |
10 (T) | A/B | N/A | 2 | 0, 1, 2 | No |
no A/B | N/A | 2 | 0, 1, 2 | Sí | |
9 (P) | A/B | N/A | 1 | 0 y 1 | No |
no A/B | N/A | 1 | 0 y 1 | Sí | |
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 (considera 0) | Sí |
* 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 (incluidas
boot
ydtbo
) y alternar entre ellas durante 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.Dispositivos que no son A/B que se lanzan con Android 11 o versiones posteriores y con la versión 3 de encabezado de inicio se debe especificar explícitamente un encabezado de inicio versión de 2 de 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 DTBO/ACPIO durante actualización, dispositivos que no sean A/B y ejecuten Android 9 o versiones posteriores puedes especificar una imagen de DTBO/ACPIO de recuperación que contenga información de la superposición imagen como una sección separada en el formato de imagen de inicio (debe usar un encabezado de inicio) versión 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 un dispositivo que no sea A/B en dispositivos con Android 9 o versiones posteriores, actualiza el archivo de inicio la estructura de la imagen de la siguiente manera.
Sección de imagen de arranque | Cantidad de páginas |
---|---|
Encabezado de inicio (1 página) | 1 |
Kernel (l páginas) | 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) de page_size |
DTBO o ACPIO de recuperación (o páginas) | o = (recovery_[dtbo|acpio]_size + page_size -
1) de page_size |
Obtén detalles sobre los argumentos de la herramienta de mkbootimg
para especificar la imagen de arranque.
Versión del encabezado y rutas de acceso a imágenes superpuestas, consulta Encabezado de imagen de arranque
Control de versiones.
Implementa DTBO
Los dispositivos que no son A/B que ejecutan 9 o una versión posterior pueden completar el
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
entrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Extiende la variable
BOARD_MKBOOTIMG_ARGS
para especificar el encabezado de la imagen de arranque versión: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 definir la El argumentorecovery_dtbo
de la herramientamkbootimg
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 archivo
dispositivo BoardConfig.mk
:
Establece la configuración
BOARD_INCLUDE_RECOVERY_ACPIO
entrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Extiende la variable
BOARD_MKBOOTIMG_ARGS
para especificar el encabezado de la imagen de arranque versión. La variable debe ser mayor o igual que 1 para admitir la recuperación el 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 definir la El argumentorecovery_acpio
de la herramientamkbootimg
durante la creación del 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