OTAs baseadas em blocos

Você pode ativar atualizações over-the-air (OTA) baseadas em blocos para novos dispositivos que executam o Android 5.0. OTA é o mecanismo pelo qual os OEMs atualizam remotamente a partição do sistema de um dispositivo:

  • O Android 5.0 e versões posteriores usam atualizações OTA em bloco para garantir que cada dispositivo use exatamente a mesma partição. Em vez de comparar arquivos individuais e calcular patches binários, o bloco OTA trata a partição inteira como um arquivo e calcula um único patch binário, garantindo que a partição resultante contenha exatamente os bits pretendidos. Isso permite que a imagem do sistema do dispositivo atinja o mesmo estado via fastboot ou OTA.
  • O Android 4.4 e versões anteriores usavam atualizações de arquivos OTA, o que garantia que os dispositivos tivessem conteúdos, permissões e modos de arquivo semelhantes, mas permitiam que metadados, como carimbos de data e hora e o layout do armazenamento subjacente, variassem entre os dispositivos com base no método de atualização.

Como o bloco OTA garante que cada dispositivo use a mesma partição, ele permite o uso do dm-verity para assinar criptograficamente a partição do sistema. Para obter detalhes sobre dm-verity, consulte Inicialização verificada .

Nota: Você deve ter um sistema OTA de bloco funcional antes de usar dm-verity.

Recomendações

Para dispositivos lançados com Android 5.0 ou posterior, use o bloco de atualizações OTA na ROM de fábrica. Para gerar um OTA baseado em bloco para atualizações subsequentes, passe a opção --block para ota_from_target_files .

Para dispositivos lançados com Android 4.4 ou anterior, use atualizações de arquivo OTA. Embora seja possível fazer a transição de dispositivos enviando um OTA de bloco completo do Android 5.0 ou posterior, é necessário enviar um OTA completo que seja significativamente maior do que um OTA incremental (e, portanto, não é recomendado).

Como o dm-verity requer suporte ao bootloader encontrado apenas em novos dispositivos fornecidos com Android 5.0 ou posterior, você não pode ativar o dm-verity para dispositivos existentes.

Os desenvolvedores que trabalham no sistema Android OTA (a imagem de recuperação e os scripts que geram OTAs) podem acompanhar as mudanças assinando a lista de discussão android-ota@googlegroups.com .

Arquivo versus bloco OTAs

Durante um OTA baseado em arquivo, o Android tenta alterar o conteúdo da partição do sistema na camada do sistema de arquivos (arquivo por arquivo). Não é garantido que a atualização grave arquivos em uma ordem consistente, tenha um horário da última modificação ou superbloco consistente, ou mesmo coloque os blocos no mesmo local no dispositivo de bloco. Por esse motivo, os OTAs baseados em arquivo falham em um dispositivo habilitado para dm-verity; após a tentativa OTA, o dispositivo não inicializa.

Durante um OTA baseado em bloco, o Android fornece ao dispositivo a diferença entre as duas imagens de bloco (em vez de dois conjuntos de arquivos). A atualização verifica a construção de um dispositivo em relação ao servidor de compilação correspondente no nível do bloco (abaixo do sistema de arquivos) usando um dos seguintes métodos:

  • Atualização completa . Copiar a imagem completa do sistema é simples e facilita a geração de patches, mas também gera imagens grandes que podem tornar a aplicação de patches cara.
  • Atualização incremental . O uso de uma ferramenta de diferença binária gera imagens menores e facilita a aplicação do patch, mas consome muita memória ao gerar o patch em si.

Nota: adb fastboot coloca exatamente os mesmos bits no dispositivo que um OTA completo, portanto, o flash é compatível com o bloco OTA.

Atualizar sistemas não modificados

Para dispositivos com partições de sistema não modificadas executando Android 5.0, o processo de download e instalação de um bloco OTA permanece o mesmo que para um arquivo OTA. No entanto, a própria atualização OTA pode incluir uma ou mais das seguintes diferenças:

  • Tamanho do download . As atualizações OTA de bloco completo têm aproximadamente o mesmo tamanho das atualizações OTA de arquivo completo, e as atualizações incrementais podem ter apenas alguns megabytes maiores.

    comparação de tamanhos OTA

    Figura 1. Compare os tamanhos OTA do Nexus 6 entre as versões Android 5.0 e Android 5.1 (alterações de build de destino variáveis)

    Em geral, as atualizações OTA de bloco incremental são maiores que as atualizações OTA de arquivo incremental devido a:

    • Preservação de dados . OTAs baseadas em blocos preservam mais dados (metadados de arquivos, dados dm-verity, layout ext4, etc.) do que OTAs baseadas em arquivos.
    • Diferenças entre algoritmos de computação . Em uma atualização de arquivo OTA, se o caminho do arquivo for idêntico em ambas as compilações, o pacote OTA não conterá dados para esse arquivo. Em uma atualização OTA em bloco, a determinação de pouca ou nenhuma alteração em um arquivo depende da qualidade do algoritmo de cálculo do patch e do layout dos dados do arquivo no sistema de origem e de destino.
  • Sensibilidade a flash e RAM defeituosos . Se um arquivo estiver corrompido, um arquivo OTA será bem-sucedido, desde que não toque no arquivo corrompido, mas um bloco OTA falhará se detectar qualquer corrupção na partição do sistema.

Atualizar sistemas modificados

Para dispositivos com partições de sistema modificadas executando Android 5.0:

  • Falha nas atualizações incrementais do bloco OTA . Uma partição do sistema pode ser modificada durante uma adb remount ou como resultado de malware. O arquivo OTA tolera algumas alterações na partição, como a adição de arquivos que não fazem parte da compilação de origem ou de destino. No entanto, o bloco OTA não tolera adições à partição, portanto os usuários precisarão instalar um OTA completo (substituindo quaisquer modificações na partição do sistema) ou atualizar uma nova imagem do sistema para habilitar OTAs futuros.
  • As tentativas de alterar os arquivos modificados causam falha na atualização . Para atualizações OTA de arquivo e bloco, se o OTA tentar alterar um arquivo que foi modificado, a atualização OTA falhará.
  • As tentativas de acessar arquivos modificados geram erros (somente dm-verity) . Para atualizações OTA de arquivos e blocos, se dm-verity estiver habilitado e o OTA tentar acessar partes modificadas do sistema de arquivos do sistema, o OTA gerará um erro.