Imagens de recuperação

Em dispositivos não A/B, a imagem de recuperação deve conter informações de um blob da árvore de dispositivos (DTB, na sigla em inglês) ou Interface de alimentação e configuração avançada (ACPI). 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. Dispositivos compatíveis com A/B (perfeita) de rede devem usar a recuperação como inicialização em vez separada (para detalhes, consulte Como implementar A/B) atualizações).

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 (inicialização de dispositivos) 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 e 3 Não
não A/B Sim 3 N/A Sim
não A/B Não 2 e 3 0, 1, 2 e 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/A (considerado 0) N/A (considerado 0) Não
não A/B N/A N/A (considerado 0) N/A (considerado 0) Sim

* Dispositivos A/B com Android 11 ou mais recente e usar a imagem genérica do Kernel (GKI) deve usar uma a versão principal do cabeçalho de inicialização 3 para ser compatível com a inicialização do fornecedor partição.

Pontos principais:

  • Os dispositivos A/B não precisam especificar uma imagem de recuperação porque as atualizações usam dois conjuntos de partições (incluindo boot e dtbo) e alternar entre elas durante sem precisar 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 deve ser autossuficiente e 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 atualizado, pode ocorrer uma incompatibilidade com a imagem de recuperação (que não foi atualizado).

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

Permitir que a imagem de recuperação contenha o DTBO ou ACPIO de recuperação em eventos que não sejam A/B dispositivos com o Android 9 ou mais recente, atualize a inicialização de imagem semelhante a esta.

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
Carregador de inicialização de segundo estágio (n páginas) n = (second_size + page_size - 1) / page_size
DTBO ou ACPIO de recuperação (o páginas) 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 o recovery_dtbo imagem em recovery.img, no dispositivo BoardConfig.mk:

  • Defina a configuração BOARD_INCLUDE_RECOVERY_DTBO como true:

     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 argumento recovery_dtbo da ferramenta mkbootimg durante a criação imagem de recuperação de desastres.

Se os campos BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS e As variáveis BOARD_PREBUILT_DTBOIMAGE são definidas corretamente, o sistema de build do Android inclui o DTBO especificado pela variável BOARD_PREBUILT_DTBOIMAGE no recovery.img.

Implementar ACPIO

Dispositivos não A/B com o Android 9 ou versões mais recentes podem usar uma imagem de sobreposição ACPIO (em vez de uma imagem DTBO) e pode preencher o Seção recovery_acpio (em vez da seção recovery_dtbo) do imagem de recuperação de desastres. Para incluir a imagem recovery_acpio em recovery.img, no dispositivo BoardConfig.mk:

  • Defina a configuração BOARD_INCLUDE_RECOVERY_ACPIO como true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Estenda a variável BOARD_MKBOOTIMG_ARGS para especificar o cabeçalho da imagem de inicialização para a versão anterior. A variável precisa ser maior ou igual a 1 para oferecer suporte à recuperação ACPIO (na sigla em inglês).

    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 argumento recovery_acpio da ferramenta mkbootimg 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.