OTAs baseados em blocos

Você pode habilitar 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 de bloco para garantir que cada dispositivo use exatamente a mesma partição. Em vez de comparar arquivos individuais e computar 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, que garantiam que os dispositivos continham conteúdos de arquivos, permissões e modos 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 de dm-verity para assinar criptograficamente a partição do sistema. Para obter detalhes sobre o dm-verity, consulte Inicialização verificada .

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

Recomendações

Para dispositivos iniciados com Android 5.0 ou posterior, use as atualizações OTA de bloco 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 as 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 é significativamente maior do que um OTA incremental (e, portanto, desencorajado).

Como o dm-verity requer suporte ao carregador de inicialização encontrado apenas em novos dispositivos enviados com Android 5.0 ou posterior, você não pode habilitar 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 alterações assinando a lista de discussão android-ota@googlegroups.com .

OTAs de arquivo vs. bloco

Durante uma OTA baseada 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 os arquivos em uma ordem consistente, tenha uma hora ou superbloco consistente da última modificação ou até 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 uma OTA baseada 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 uma compilação de dispositivo em relação ao servidor de compilação correspondente no nível de 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 de patches, mas consome muita memória ao gerar o próprio patch.

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

Atualizando sistemas não modificados

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

  • Baixe o tamanho . As atualizações OTA de bloco completo são aproximadamente do mesmo tamanho que as atualizações OTA de arquivo completo, e as atualizações incrementais podem ser apenas alguns megabytes maiores.

    comparação de tamanhos de OTA

    Figura 1. Comparar os tamanhos de OTA do Nexus 6 entre as versões Android 5.0 e Android 5.1 (alterações de compilação de destino variadas)

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

    • Preservação de dados . Os OTAs baseados em blocos preservam mais dados (metadados de arquivo, dados dm-verity, layout ext4, etc.) do que OTAs baseados em arquivo.
    • Diferenças do algoritmo de computação . Em uma atualização de arquivo OTA, se um caminho de arquivo for idêntico em ambas as compilações, o pacote OTA não conterá dados para esse arquivo. Em uma atualização OTA de bloco, determinar 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.

Atualizando sistemas modificados

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

  • As atualizações OTA de bloco incremental falham . 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 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 exibir 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á.
  • Tentativas de acessar arquivos modificados geram erros (somente dm-verity) . Para atualizações OTA de arquivo e bloco, se dm-verity estiver ativado e o OTA tentar acessar partes modificadas do sistema de arquivos do sistema, o OTA gerará um erro.