Imagens de recuperação

Em dispositivos não A/B, a imagem de recuperação precisa conter informações de um blob de árvore de dispositivos (DTB) ou Interface avançada de configuração e energia (ACPI) imagem de sobreposição. Quando esses dispositivos são inicializados na recuperação, o bootloader 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 (contínuas) precisam usar a recuperação como inicialização em vez de uma partição de recuperação separada. Para mais detalhes, consulte Implementar atualizações A/B.

As opções para incluir um DTBO/ACPIO de recuperação como parte da imagem de inicialização/recuperação variam entre as versões do Android.

Liberar Esquema de atualização Conformidade com a GKI Versão do cabeçalho de inicialização (dispositivos de lançamento) Versão do cabeçalho de inicialização (dispositivos de upgrade) Imagem de recuperação dedicada necessária
11 A/B,
A/B virtual
Sim 3* N/A Não
A/B,
A/B virtual
Não 2, 3 0, 1, 2, 3 Não
não A/B Sim 3 N/A Sim
não A/B Não 2, 3 0, 1, 2, 3 Sim
10 (Q) A/B N/A 2 0, 1, 2 Não
não A/B N/A 2 0, 1, 2 Sim
9 (P) A/B N/A 1 0, 1 Não
não A/B N/A 1 0, 1 Sim
8 (O) A/B N/A (considerada 0) N/A (considerada 0) Não não A/B
N/A N/A (considerada 0) N/A (considerada 0) Sim ***** _Os dispositivos A/B que executam o Android 11 ou mais recente e 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 principais: Dispositivos A/B que executam o Android 11 ou superior e usam a Imagem Genérica do Kernel (GKI) devem usar uma versão do cabeçalho de inicialização primário 3 para serem compatíveis com a partição de inicialização do fornecedor.

Os dispositivos A/B não precisam especificar uma imagem de recuperação, já que as atualizações A/B usam dois conjuntos de partições (incluindo `boot` e `dtbo`) e alternam entre eles durante as atualizações, removendo a necessidade de uma imagem de recuperação.

  • Os dispositivos A/B ainda podem usar uma imagem de recuperação dedicada.bootdtbo Os dispositivos não A/B lançados com o Android 11 ou mais recente e que usam uma versão 3 do cabeçalho de inicialização precisam especificar explicitamente uma versão 2 do cabeçalho de inicialização para a imagem de recuperação separadamente.

  • Dispositivos não A/B lançados com Android 11 ou superior e usando a versão 3 do cabeçalho de inicialização devem especificar explicitamente a versão 2 do cabeçalho de inicialização separadamente para a imagem de recuperação. 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.

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Sobre falhas de OTA e imagens de recuperação

Para evitar falhas de atualização over-the-air (OTA) em dispositivos não A/B, a imagem de recuperação precisa ser autossuficiente e independente de outras imagens.

Para evitar falhas OTA em dispositivos não A/B, a imagem de recuperação deve ser autossuficiente e independente de outras imagens. 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). 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).

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 da seguinte maneira.

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 superior, atualize a estrutura da imagem de inicialização da seguinte forma.

Seção da imagem de inicialização Cabeçalho de inicialização (1 página)
1 1
l = (`kernel_size` \+ `page_size` \- 1) / `page_size` l = (kernel_size + page_size - 1) / page_size
m = (`ramdisk_size` \+ `page_size` \- 1) / `page_size` m = (ramdisk_size + page_size - 1) / page_size
n = (`second_size` \+ `page_size` \- 1) / `page_size` n = (second_size + page_size - 1) / page_size
o = (`recovery_[dtbo|acpio]_size` \+ `page_size` \- 1) / `page_size` 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ões do cabeçalho da imagem de inicialização.

Dispositivos não A/B que executam o Android 9 ou mais recente podem preencher a seção `recovery_dtbo` da imagem de recuperação.

Dispositivos não A/B executando a versão 9 ou superior podem preencher a seção recovery_dtbo da imagem de recuperação. Para incluir a 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 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 definida para o caminho da imagem DTBO. 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`.recovery_dtbomkbootimg

Implementar ACPIO If the BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS, and BOARD_PREBUILT_DTBOIMAGE variables are set correctly, the Android sistema de build includes the DTBO specified by the BOARD_PREBUILT_DTBOIMAGE variable in recovery.img.

Dispositivos não A/B que executam o Android 9 ou mais recente 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.

Dispositivos não A/B com 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 como true:

    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)
    
  • O sistema de build do Android usa a variável para definir o argumento `recovery_acpio` da ferramenta `mkbootimg` durante a criação da imagem de recuperação.BOARD_RECOVERY_ACPIO O sistema de build do Android usa a variável para definir o argumento da ferramenta durante a criação da imagem de recuperação.recovery_acpiomkbootimg

Se as variáveis BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS e BOARD_RECOVERY_ACPIO estiverem definidas corretamente, o sistema de build do Android vai incluir o ACPIO especificado pela variável BOARD_RECOVERY_ACPIO em recovery.img.