OTA basadas en bloques

Puede habilitar las actualizaciones inalámbricas basadas en bloques (OTA) para nuevos dispositivos con Android 5.0. OTA es el mecanismo mediante el cual los OEM actualizan de forma remota la partición del sistema de un dispositivo:

  • Android 5.0 y versiones posteriores usan actualizaciones OTA en bloque para garantizar que cada dispositivo use exactamente la misma partición. En lugar de comparar archivos individuales y calcular parches binarios, Block OTA maneja la partición completa como un solo archivo y calcula un solo parche binario, asegurando que la partición resultante contenga exactamente los bits previstos. Esto permite que la imagen del sistema del dispositivo alcance el mismo estado a través de fastboot u OTA.
  • Android 4.4 y versiones anteriores usaban actualizaciones de archivos OTA, lo que garantizaba que los dispositivos tuvieran contenidos, permisos y modos de archivo similares, pero permitían que los metadatos, como las marcas de tiempo y el diseño del almacenamiento subyacente, variaran entre dispositivos según el método de actualización.

Debido a que Block OTA garantiza que cada dispositivo use la misma partición, permite el uso de dm-verity para firmar criptográficamente la partición del sistema. Para obtener detalles sobre dm-verity, consulte Arranque verificado .

Nota: Debe tener un sistema OTA de bloque en funcionamiento antes de usar dm-verity.

Recomendaciones

Para los dispositivos que se inician con Android 5.0 o posterior, utilice las actualizaciones de OTA en bloque en la ROM de fábrica. Para generar una OTA basada en bloques para actualizaciones posteriores, pase la opción --block a ota_from_target_files .

Para dispositivos que se lanzaron con Android 4.4 o anterior, use actualizaciones de archivos OTA. Si bien es posible realizar la transición de dispositivos enviando un OTA de bloque completo de Android 5.0 o posterior, requiere enviar un OTA completo que es significativamente más grande que un OTA incremental (y, por lo tanto, no se recomienda).

Debido a que dm-verity requiere la compatibilidad con el cargador de arranque que se encuentra solo en los dispositivos nuevos que se envían con Android 5.0 o posterior, no puede habilitar dm-verity para los dispositivos existentes.

Los desarrolladores que trabajan en el sistema OTA de Android (la imagen de recuperación y los scripts que generan OTA) pueden mantenerse al día con los cambios suscribiéndose a la lista de correo android-ota@googlegroups.com .

Archivar vs. Bloquear OTA

Durante una OTA basada en archivos, Android intenta cambiar el contenido de la partición del sistema en la capa del sistema de archivos (archivo por archivo). No se garantiza que la actualización escriba archivos en un orden consistente, tenga una hora de última modificación o superbloque consistente, o incluso coloque los bloques en la misma ubicación en el dispositivo de bloques. Por este motivo, las OTA basadas en archivos fallan en un dispositivo habilitado para dm-verity; después del intento de OTA, el dispositivo no arranca.

Durante una OTA basada en bloques, Android muestra al dispositivo la diferencia entre las dos imágenes de bloque (en lugar de dos conjuntos de archivos). La actualización compara la compilación de un dispositivo con el servidor de compilación correspondiente a nivel de bloque (por debajo del sistema de archivos) mediante uno de los siguientes métodos:

  • Actualización completa . Copiar la imagen completa del sistema es simple y facilita la generación de parches, pero también genera imágenes grandes que pueden hacer que la aplicación de parches sea costosa.
  • Actualización incremental . El uso de una herramienta de diferenciación binaria genera imágenes más pequeñas y facilita la aplicación de parches, pero consume mucha memoria cuando se genera el parche en sí.

Nota: adb fastboot coloca exactamente los mismos bits en el dispositivo que una OTA completa, por lo que la actualización es compatible con la OTA en bloque.

Actualización de sistemas no modificados

Para dispositivos con particiones de sistema no modificadas que ejecutan Android 5.0, el proceso de descarga e instalación para un bloque OTA sigue siendo el mismo que para un archivo OTA. Sin embargo, la actualización OTA en sí puede incluir una o más de las siguientes diferencias:

  • Tamaño de descarga . Las actualizaciones OTA de bloque completo tienen aproximadamente el mismo tamaño que las actualizaciones OTA de archivo completo, y las actualizaciones incrementales pueden ser solo unos pocos megabytes más grandes.

    comparación de tamaños de OTA

    Figura 1. Comparar los tamaños OTA de Nexus 6 entre las versiones de Android 5.0 y Android 5.1 (diferentes cambios de compilación objetivo)

    En general, las actualizaciones OTA de bloques incrementales son más grandes que las actualizaciones OTA de archivos incrementales debido a:

    • Preservación de datos . Las OTA basadas en bloques conservan más datos (metadatos de archivos, datos de dm-verity, diseño ext4, etc.) que las OTA basadas en archivos.
    • Diferencias de algoritmos de cálculo . En una actualización OTA de archivo, si la ruta de un archivo es idéntica en ambas compilaciones, el paquete OTA no contiene datos para ese archivo. En una actualización de bloque OTA, determinar poco o ningún cambio en un archivo depende de la calidad del algoritmo de cálculo del parche y el diseño de los datos del archivo tanto en el sistema de origen como en el de destino.
  • Sensibilidad a flash y RAM defectuosos . Si un archivo está dañado, un archivo OTA tiene éxito siempre que no toque el archivo dañado, pero un bloque OTA falla si detecta algún daño en la partición del sistema.

Actualización de sistemas modificados

Para dispositivos con particiones de sistema modificadas que ejecutan Android 5.0:

  • Las actualizaciones OTA de bloques incrementales fallan . Una partición del sistema puede modificarse durante un montaje de adb remount o como resultado de malware. File OTA tolera algunos cambios en la partición, como la adición de archivos que no forman parte de la compilación de origen o de destino. Sin embargo, bloquear OTA no tolera adiciones a la partición, por lo que los usuarios deberán instalar una OTA completa sobrescribiendo cualquier modificación de la partición del sistema o actualizar una nueva imagen del sistema para habilitar futuras OTA.
  • Los intentos de cambiar los archivos modificados provocan un error de actualización . Para las actualizaciones OTA de archivos y bloques, si la OTA intenta cambiar un archivo que ha sido modificado, la actualización OTA falla.
  • Los intentos de acceder a los archivos modificados generan errores (solo dm-verity) . Para las actualizaciones OTA de archivos y bloques, si dm-verity está habilitado y la OTA intenta acceder a partes modificadas del sistema de archivos del sistema, la OTA genera un error.