OTA basées sur des blocs

Vous pouvez activer les mises à jour OTA basées sur des blocs pour les nouveaux appareils équipés d'Android 5.0. La mise à jour 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 s'assurer que chaque appareil utilise exactement la même partition. Au lieu de comparer des fichiers individuels et de calculer des correctifs binaires, la mise à jour OTA par bloc gère l'ensemble de la partition comme un seul fichier et calcule un seul correctif binaire, ce qui garantit 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 OTA de fichiers, ce qui garantissait que les appareils contenaient des contenus, des autorisations et des modes de fichiers similaires, mais permettait aux métadonnées telles que les codes temporels et la mise en page du stockage sous-jacent de varier d'un appareil à l'autre en fonction de la méthode de mise à jour.

Étant donné que le OTA par bloc garantit que chaque appareil utilise la même partition, il permet d'utiliser dm-verity pour signer de manière cryptographique la partition système. Pour en savoir plus sur dm-verity, consultez la section Démarrage validé.

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

Recommandations

Pour les appareils lancés avec Android 5.0 ou version ultérieure, bloquez les mises à jour OTA dans la ROM d'usine. Pour générer une mise à jour OTA basée 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 version antérieure, utilisez les mises à jour OTA de fichiers. Bien qu'il soit possible de migrer des appareils en envoyant une mise à jour OTA complète d'Android 5.0 ou version ultérieure, cela nécessite d'envoyer une mise à jour OTA complète qui est beaucoup plus volumineuse qu'une mise à jour OTA incrémentielle (et est donc déconseillée).

Comme dm-verity nécessite la prise en charge du bootloader, qui n'est disponible que 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 qui travaillent sur le système OTA Android (l'image de récupération et les scripts qui génèrent les OTA) peuvent se tenir informés des modifications en s'abonnant à la liste de diffusion android-ota@googlegroups.com.

Mises à jour OTA par fichier ou par bloc

Lors d'une mise à jour 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 (par fichier). Il n'est pas garanti que la mise à jour écrive les fichiers dans un ordre cohérent, qu'elle dispose d'une heure de dernière modification ou d'un superbloc cohérents, ni même qu'elle place les blocs au même endroit sur l'appareil de bloc. Pour cette raison, les OTA basées sur des fichiers échouent sur un appareil compatible avec dm-verity. Après la tentative OTA, l'appareil ne démarre pas.

Lors d'une mise à jour OTA basée sur des blocs, Android fournit à l'appareil la différence entre les deux images de bloc (plutôt que deux ensembles de fichiers). La mise à jour vérifie une version d'appareil par rapport au serveur de compilation 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 de grandes images qui peuvent rendre l'application de correctifs coûteuse.
  • Mise à jour incrémentielle. L'utilisation d'un outil de comparaison binaire génère des images plus petites et facilite l'application du correctif, mais consomme 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'une mise à jour OTA complète. Le flashage est donc compatible avec la mise à jour OTA par bloc.

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'une mise à jour OTA par bloc reste le même que pour une mise à jour OTA par fichier. Toutefois, 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 de bloc complet sont à peu près de la même taille que les mises à jour OTA de fichier complet, et les mises à jour incrémentielles peuvent être de quelques mégaoctets plus importantes.

    Comparaison des tailles des mises à jour OTA

    Figure 1 : Comparer les tailles des mises à jour OTA du Nexus 6 entre les versions Android 5.0 et Android 5.1 (modifications de la compilation cible variables)

    En règle générale, les mises à jour OTA par bloc incrémentelles sont plus volumineuses que les mises à jour OTA par fichier incrémentielles pour les raisons suivantes:

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

Mettre à jour les systèmes modifiés

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

  • Les mises à jour OTA par bloc incrémentiel échouent. Une partition système peut être modifiée lors d'une adb remount ou à la suite d'un logiciel malveillant. La mise à jour OTA de fichiers tolère certaines modifications apportées à la partition, telles que l'ajout de fichiers qui ne font pas partie du build source ou cible. Toutefois, le blocage OTA ne tolère pas les ajouts à la partition. Les utilisateurs doivent donc installer une mise à jour OTA complète écrasant toute modification de la partition système ou flasher une nouvelle image système pour activer les futures mises à jour OTA.
  • Les tentatives de modification de 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 à des parties modifiées du système de fichiers, l'OTA génère une erreur.