OTA basées sur des blocs

Vous pouvez activer les mises à jour OTA (over-the-air) par blocs pour les nouveaux appareils exécutant Android 5.0. L'OTA est le mécanisme par lequel les OEM mettent à jour à distance la partition système d'un appareil :

  • Android 5.0 et les versions ultérieures utilisent des mises à jour OTA bloquées pour garantir que chaque appareil utilise exactement la même partition. Au lieu de comparer des fichiers individuels et de calculer des correctifs binaires, le bloc OTA gère la partition entière comme un seul fichier et calcule un seul correctif binaire, garantissant que la partition résultante contient exactement les bits prévus. Cela permet à l'image système de l'appareil d'atteindre le même état via fastboot ou OTA.
  • Android 4.4 et les versions antérieures utilisaient des mises à jour de fichiers OTA, ce qui garantissait que les appareils contenaient des contenus, des autorisations et des modes de fichiers similaires, mais permettaient aux métadonnées telles que les horodatages et la disposition du stockage sous-jacent de varier entre les appareils en fonction de la méthode de mise à jour.

Étant donné que le bloc OTA garantit que chaque périphérique utilise la même partition, il permet d'utiliser dm-verity pour signer cryptographiquement la partition système. Pour plus de détails sur dm-verity, consultez Démarrage vérifié .

Remarque : Vous devez disposer d'un système OTA de bloc de travail avant d'utiliser dm-verity.

Recommandations

Pour les appareils lancés avec Android 5.0 ou version ultérieure, utilisez le blocage des mises à jour OTA dans la ROM d'usine. Pour générer un OTA basé sur des blocs pour les mises à jour ultérieures, transmettez l'option --block à ota_from_target_files .

Pour les appareils lancés avec Android 4.4 ou une version antérieure, utilisez les mises à jour de fichiers OTA. Bien qu'il soit possible de faire la transition d'appareils en envoyant un bloc OTA complet d'Android 5.0 ou version ultérieure, cela nécessite l'envoi d'un OTA complet qui est nettement plus grand qu'un OTA incrémentiel (et est donc déconseillé).

Étant donné que dm-verity nécessite la prise en charge du chargeur de démarrage disponible uniquement sur les nouveaux appareils livrés avec Android 5.0 ou version ultérieure, vous ne pouvez pas activer dm-verity pour les appareils existants.

Les développeurs travaillant sur le système Android OTA (l'image de récupération et les scripts qui génèrent les OTA) peuvent suivre les modifications en s'abonnant à la liste de diffusion android-ota@googlegroups.com .

Fichiers ou blocs OTA

Lors d'une OTA basée sur des fichiers, Android tente de modifier le contenu de la partition système au niveau de la couche du système de fichiers (fichier par fichier). La mise à jour n'est pas garantie d'écrire les fichiers dans un ordre cohérent, d'avoir une heure de dernière modification ou un superbloc cohérent, ni même de placer les blocs au même emplacement sur le périphérique de bloc. Pour cette raison, les OTA basés sur des fichiers échouent sur un appareil compatible dm-verity ; après la tentative OTA, l'appareil ne démarre pas.

Lors d'une OTA basée sur des blocs, Android transmet à l'appareil la différence entre les deux images de bloc (plutôt que deux ensembles de fichiers). La mise à jour vérifie la build d'un périphérique par rapport au serveur de build correspondant au niveau du bloc (sous le système de fichiers) à l'aide de l'une des méthodes suivantes :

  • Mise à jour complète . La copie de l'image système complète est simple et facilite la génération de correctifs, mais génère également des images volumineuses qui peuvent rendre l'application de correctifs coûteuse.
  • Mise à jour incrémentielle . L'utilisation d'un outil de différence binaire génère des images plus petites et facilite l'application des correctifs, mais nécessite beaucoup de mémoire lors de la génération du correctif lui-même.

Remarque : adb fastboot place exactement les mêmes bits sur l'appareil qu'un OTA complet, le flashage est donc compatible avec le bloc OTA.

Mettre à jour les systèmes non modifiés

Pour les appareils dotés de partitions système non modifiées exécutant Android 5.0, le processus de téléchargement et d'installation d'un bloc OTA reste le même que pour un fichier OTA. Cependant, la mise à jour OTA elle-même peut inclure une ou plusieurs des différences suivantes :

  • Taille de téléchargement . Les mises à jour OTA en bloc complet ont à peu près la même taille que les mises à jour OTA de fichiers complets, et les mises à jour incrémentielles peuvent être plus grandes de quelques mégaoctets seulement.

    comparaison des tailles OTA

    Figure 1. Comparez les tailles OTA du Nexus 6 entre les versions Android 5.0 et Android 5.1 (changements de build cibles variables)

    En général, les mises à jour OTA incrémentielles de blocs sont plus volumineuses que les mises à jour OTA incrémentielles de fichiers en raison de :

    • Conservation des données . Les OTA basées sur des blocs conservent plus de données (métadonnées de fichier, données dm-verity, disposition ext4, etc.) que les OTA basées sur des fichiers.
    • Différences entre les algorithmes de calcul . Dans une mise à jour de fichier OTA, si un chemin de fichier est identique dans les deux versions, le package OTA ne contient aucune donnée pour ce fichier. Dans une mise à jour OTA en bloc, la détermination de peu ou pas de changement dans un fichier dépend de la qualité de l'algorithme de calcul du correctif et de la disposition des données du fichier dans les systèmes source et cible.
  • Sensibilité au flash et à la RAM défectueux . Si un fichier est corrompu, un fichier OTA réussit tant qu'il ne touche pas le fichier corrompu, mais un bloc OTA échoue s'il détecte une corruption sur la partition système.

Mettre à jour les systèmes modifiés

Pour les appareils dotés de partitions système modifiées exécutant Android 5.0 :

  • Les mises à jour incrémentielles OTA par bloc échouent . Une partition système peut être modifiée lors d'un adb remount ou à la suite d'un logiciel malveillant. File OTA tolère certaines modifications de la partition, telles que l'ajout de fichiers qui ne font pas partie de la version source ou cible. Cependant, le bloc OTA ne tolère pas les ajouts à la partition, les utilisateurs devront donc installer un OTA complet en écrasant toute modification de la partition système) ou flasher une nouvelle image système pour activer les futurs OTA.
  • Les tentatives de modification des fichiers modifiés entraînent un échec de la mise à jour . Pour les mises à jour OTA de fichiers et de blocs, si l'OTA tente de modifier un fichier qui a été modifié, la mise à jour OTA échoue.
  • Les tentatives d'accès aux fichiers modifiés génèrent des erreurs (dm-verity uniquement) . Pour les mises à jour OTA de fichiers et de blocs, si dm-verity est activé et que l'OTA tente d'accéder aux parties modifiées du système de fichiers système, l'OTA génère une erreur.