Em dispositivos não A/B, a imagem de recuperação precisa conter informações de uma imagem de sobreposição de blob da árvore de dispositivos (DTB, na sigla em inglês) ou imagem de sobreposição de configuração avançada e interface de energia (ACPI, na sigla em inglês). Quando esses os dispositivos inicializam 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 (seamless) precisam usar a recuperação como inicialização em vez de uma partição de recuperação separada. Para mais detalhes, consulte Como implementar atualizações A/B.
As opções para incluir um DTBO/ACPIO de recuperação como parte da inicialização/recuperação imagem diferente entre as versões do Android.
Versão | Atualizar esquema | Conformidade com a GKI | Versão do cabeçalho de inicialização (dispositivos de inicialização) | Versão do cabeçalho de inicialização (upgrade de dispositivos) | É necessária uma imagem de recuperação dedicada |
---|---|---|---|---|---|
11 | A/B, A/B virtual |
Sim | 3* | N/A | Não |
A/B, A/B virtual |
Não | 2 e 3 | 0, 1, 2, 3 | Não | |
não A/B | Sim | 3 | N/A | Sim | |
não-A/B | Não | 2 e 3 | 0, 1, 2, 3 | Sim | |
10 (T) | A/B | N/A | 2 | 0, 1 e 2 | Não |
não A/B | N/A | 2 | 0, 1 e 2 | Sim | |
9 (p) | A/B | N/A | 1 | 0 e 1 | Não |
não A/B | N/A | 1 | 0 e 1 | Sim | |
8 (O) | A/B | N/A | N/D (considerado 0) | N/A (considerado 0) | Não |
não A/B | N/A | N/D (considerado 0) | N/D (considerado 0) | Sim |
* Os dispositivos A/B com o Android 11 ou versões mais recentes e que usam a imagem genérica do kernel (GKI, na sigla em inglês) precisam usar uma versão principal do cabeçalho de inicialização 3 para serem compatíveis com a partição de inicialização do fornecedor.
Pontos importantes:
Os dispositivos A/B não precisam especificar uma imagem de recuperação, porque 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. Os dispositivos A/B podem use uma imagem de recuperação dedicada.Dispositivos não A/B lançados com o Android 11 ou versões mais recentes e usar uma versão 3 de cabeçalho de inicialização deve especificar explicitamente um cabeçalho de inicialização versão 2 da imagem de recuperação separadamente. 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 de OTA e imagens de recuperação
Para evitar falhas over-the-air (OTA) em dispositivos não A/B, a imagem de recuperação precisa ser independente de outras imagens. Durante uma atualização OTA, se ocorrer um problema depois que a imagem de sobreposição for atualizada (mas antes da 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, dispositivos não A/B com o Android 9 ou versões mais recentes pode especificar uma imagem de recuperação DTBO/ACPIO contendo informações da sobreposição imagem como uma seção separada no formato de imagem de inicialização (deve usar um cabeçalho de inicialização versão 1 ou 2).
Mudanças 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 que executam o Android 9 ou mais recente, atualize a estrutura da imagem de inicialização conforme abaixo.
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 (páginas m) | m = (ramdisk_size + page_size -
1) / page_size |
Carregador de inicialização de segundo estágio (n páginas) | n = (second_size + page_size -
1) / page_size |
DTBO de recuperação ou ACPIO (páginas o) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Para detalhes sobre os argumentos da ferramenta mkbootimg
para especificar a imagem de inicialização
versão do cabeçalho e caminhos da imagem de sobreposição, consulte Cabeçalho da imagem de inicialização
Controle de versão.
Implementar DTBO
Dispositivos não A/B com a versão 9 ou mais recente podem preencher o
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 o cabeçalho da imagem de inicialização versão:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Verifique se a variável
BOARD_PREBUILT_DTBOIMAGE
está definida como o caminho do Imagem de DTBO. O sistema de compilação do Android usa a variável para definir a O argumentorecovery_dtbo
da ferramentamkbootimg
durante a criação imagem de recuperação de desastres.
Se as variáveis BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
e
BOARD_PREBUILT_DTBOIMAGE
estiverem definidas corretamente, o sistema de build do Android
vai incluir o DTBO especificado pela variável BOARD_PREBUILT_DTBOIMAGE
em
recovery.img
.
Implementar a ACPIO
Dispositivos que não são A/B com o Android 9 ou versões mais recentes podem usar
uma imagem de sobreposição ACPIO (em vez de uma 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
comotrue
: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 precisa ser maior ou igual a 1 para oferecer suporte à recuperação ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Verifique se a variável
BOARD_RECOVERY_ACPIO
está definida como o caminho do Imagem ACPIO. O sistema de compilação do Android usa a variável para definir a O argumentorecovery_acpio
da ferramentamkbootimg
durante a criação do imagem de recuperação de desastres.
Se os campos BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
e
As variáveis BOARD_RECOVERY_ACPIO
são definidas corretamente, o sistema de build do Android
inclui o ACPIO especificado pela variável BOARD_RECOVERY_ACPIO
na
recovery.img
.