Em dispositivos não A/B, a imagem de recuperação deve conter informações de um blob de árvore de dispositivos (DTB) ou de uma imagem de sobreposição de interface de energia e configuração avançada (ACPI) . Quando esses dispositivos são inicializados na recuperação, o carregador de inicialização pode carregar a imagem de sobreposição compatível com a imagem de recuperação. Os dispositivos que oferecem suporte a atualizações A/B (sem interrupções) devem usar a recuperação como inicialização em vez de uma partição de recuperação separada (para obter detalhes, consulte Implementação de atualizações A/B ).
As opções para incluir um DTBO/ACPIO de recuperação como parte da imagem de inicialização/recuperação diferem entre as versões do Android.
Liberação | Atualizar esquema | Conformidade com GKI | Versão do cabeçalho de inicialização (dispositivos de inicialização) | Versão do cabeçalho de inicialização (atualizando dispositivos) | É necessária uma imagem de recuperação dedicada |
---|---|---|---|---|---|
11 | A/B, A/B virtual | sim | 3 * | N / D | Não |
A/B, A/B virtual | Não | 2, 3 | 0, 1, 2, 3 | Não | |
não A/B | sim | 3 | N / D | sim | |
não A/B | Não | 2, 3 | 0, 1, 2, 3 | sim | |
10 (Q) | A/B | N / D | 2 | 0, 1, 2 | Não |
não A/B | N / D | 2 | 0, 1, 2 | sim | |
9 (P) | A/B | N / D | 1 | 0, 1 | Não |
não A/B | N / D | 1 | 0, 1 | sim | |
8 (O) | A/B | N / D | N/A (considerado 0) | N/A (considerado 0) | Não |
não A/B | N / D | N/A (considerado 0) | N/A (considerado 0) | sim |
* Os dispositivos A/B que executam o Android 11 ou superior e usam a imagem genérica do kernel (GKI) devem usar uma versão de cabeçalho de inicialização primária 3 para serem compatíveis com a partição de inicialização do fornecedor .
Pontos chave:
Os dispositivos A/B não precisam especificar uma imagem de recuperação, pois as atualizações A/B usam dois conjuntos de partições (incluindo
boot
edtbo
) e alternam entre eles durante as atualizações, eliminando a necessidade de uma imagem de recuperação. Se desejado, os dispositivos A/B ainda podem usar uma imagem de recuperação dedicada.Dispositivos não A/B iniciados com Android 11 ou superior e usando uma versão de cabeçalho de inicialização 3 devem especificar explicitamente uma versão de cabeçalho de inicialização 2 para a imagem de recuperação separadamente. Por exemplo:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Para arquiteturas que não oferecem suporte a árvores de dispositivos, a imagem de recuperação pode incluir uma imagem ACPIO em vez de uma imagem DTBO.
Sobre falhas OTA e imagens de recuperação
Para evitar falhas over-the-air (OTA) em dispositivos não A/B, a imagem de recuperação deve ser autossuficiente e independente de outras imagens. Durante uma atualização OTA, se ocorrer um problema após a atualização da imagem de sobreposição (mas antes de concluir a atualização completa), o dispositivo tentará inicializar no modo de recuperação para concluir a atualização OTA. No entanto, como a partição de sobreposição já foi atualizada, pode ocorrer uma incompatibilidade com a imagem de recuperação (que ainda não foi atualizada).
Para evitar que a recuperação dependa da partição DTBO/ACPIO durante uma atualização, os dispositivos não A/B executando o Android 9 ou superior podem especificar uma imagem DTBO/ACPIO de recuperação contendo informações da imagem de sobreposição como uma seção separada no formato da imagem de inicialização ( deve usar uma versão de cabeçalho de inicialização de 1 ou 2).
Alterações na imagem de inicialização
Para permitir que a imagem de recuperação contenha o DTBO ou ACPIO de recuperação em dispositivos não A/B executando o Android 9 ou superior, atualize a estrutura da imagem de inicialização da seguinte maneira.
Seção de imagem de inicialização | Número de páginas |
---|---|
Cabeçalho de inicialização (1 página) | 1 |
Kernel (l páginas) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (m páginas) | m = ( ramdisk_size + page_size - 1) / page_size |
Bootloader de segundo estágio (n páginas) | n = ( second_size + page_size - 1) / page_size |
Recuperação DTBO ou ACPIO (o páginas) | o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size |
Para obter detalhes sobre os argumentos da ferramenta mkbootimg
para especificar a versão do cabeçalho da imagem de inicialização e os caminhos da imagem de sobreposição, consulte Controle de versão do cabeçalho da imagem de inicialização .
Implementando DTBO
Dispositivos não A/B executando 9 ou superior podem preencher a seção recovery_dtbo
da imagem de recuperação. Para incluir a imagem recovery_dtbo
em recovery.img
, no dispositivo BoardConfig.mk
:
Defina a configuração
BOARD_INCLUDE_RECOVERY_DTBO
comotrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Estenda a variável
BOARD_MKBOOTIMG_ARGS
para especificar a versão do cabeçalho da imagem de inicialização:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Certifique-se de que a variável
BOARD_PREBUILT_DTBOIMAGE
esteja configurada para o caminho da imagem DTBO. O sistema de compilação do Android usa a variável para definir o argumentorecovery_dtbo
da ferramentamkbootimg
durante a criação da imagem de recuperação.
Se as BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
e BOARD_PREBUILT_DTBOIMAGE
estiverem definidas corretamente, o sistema de compilação do Android incluirá o DTBO especificado pela variável BOARD_PREBUILT_DTBOIMAGE
em recovery.img
.
Implementando ACPIO
Dispositivos não A/B executando o Android 9 ou superior podem usar uma imagem de sobreposição ACPIO (em vez de uma imagem DTBO) e podem preencher a seção recovery_acpio
(em vez da seção recovery_dtbo
) da imagem de recuperação. Para incluir a imagem recovery_acpio
em recovery.img
, no dispositivo BoardConfig.mk
:
Defina a configuração
BOARD_INCLUDE_RECOVERY_ACPIO
paratrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Estenda a variável
BOARD_MKBOOTIMG_ARGS
para especificar a versão do cabeçalho da imagem de inicialização. A variável deve ser maior ou igual a 1 para suportar a recuperação ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Certifique-se de que a variável
BOARD_RECOVERY_ACPIO
esteja configurada para o caminho da imagem ACPIO. O sistema de compilação do Android usa a variável para definir o argumentorecovery_acpio
da ferramentamkbootimg
durante a criação da imagem de recuperação.
Se as BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
e BOARD_RECOVERY_ACPIO
estiverem definidas corretamente, o sistema de compilação do Android incluirá o ACPIO especificado pela variável BOARD_RECOVERY_ACPIO
em recovery.img
.