Android 10 est compatible avec les partitions dynamiques, un système de partitionnement de l'espace utilisateur qui peut créer, redimensionner et supprimer des partitions lors des mises à jour OTA (Over-The-Air).
Cette page explique comment redimensionner des partitions dynamiques lors d'une mise à jour pour les appareils A/B lancés avec la prise en charge des partitions dynamiques, pour les appareils exécutant Android 9 et versions antérieures.
Arrière-plan
Il existe une partition super sur l'appareil. Cette
partition n'est pas suffixée par un emplacement. Le périphérique de bloc doit exister avec l'entrée blk_device pour /misc dans fstab. Par exemple, si le fichier fstab contient les éléments suivants :
/dev/block/bootdevice/by-name/misc /misc # Other fields
Le périphérique de bloc pour super doit exister dans
/dev/block/bootdevice/by-name/super, mais la
super partition n'a pas besoin d'être listée dans le
fstab fichier.
Dans la partition super, il existe deux
emplacements de métadonnées, numérotés 0 et 1, correspondant aux
emplacements A/B pour les partitions. Sur cette page, les emplacements de métadonnées sont
appelés Métadonnées S (source) et Métadonnées T (cible). De même,
les partitions sont appelées system_s,
vendor_t, etc.
Avant la mise à niveau, les métadonnées S contiennent les informations des
partitions dynamiques utilisées (généralement system_s,
vendor_s, product_s, etc.). Le système
lit les étendues de ces partitions lors de la mise à jour. Elles
ne peuvent donc pas être supprimées.
Les partitions appartiennent à des groupes de mise à jour. Pour en savoir plus, consultez Implémenter des partitions dynamiques.
Voici un exemple de métadonnées sur un appareil.
- Métadonnées 0
- Groupe
foo_a- Partition
system_a - Partition
product_services_a - Autres partitions mises à jour par Foo
- Partition
- Groupe bar_a
- Partition
vendor_a - Partition
product_a - Autres partitions mises à jour par Bar
- Partition
- Groupe
foo_b(reste de la mise à niveau précédente) - Groupe
bar_b(reste de la mise à niveau précédente)
- Groupe
- Métadonnées 1
- Groupe
foo_a(reste de la mise à niveau précédente) - Groupe
bar_a(reste de la mise à niveau précédente) - Groupe
foo_b- Partition
system_b - Partition
product_services_b - Autres partitions mises à jour par Foo
- Partition
- Groupe
bar_b- Partition
vendor_b - Partition
product_b - Autres partitions mises à jour par Bar
- Partition
- Groupe
Vous pouvez utiliser l'outil lpdump (code source sous
system/extras/partition_tools) pour vider les métadonnées sur
votre appareil. Exemple :
lpdump --slot 0 /dev/block/bootdevice/by-name/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
Flux de mise à jour
- Initialisez les métadonnées de la partition
super.- Chargez les étendues des partitions dynamiques sources à partir des métadonnées S. Soit M les métadonnées chargées.
-
Supprimez les groupes et partitions cibles (par exemple,
foo_t,bar_t) de M afin que M contienne uniquement des partitions et des groupes avec le_ssuffixe. -
Ajoutez des groupes et des partitions cibles en fonction du
dynamic_partition_metadatachamp dans le fichier manifeste de mise à jour.
La taille de chaque partition se trouve dansnew_partition_info. - Écrivez M dans les métadonnées T.
- Mappez les partitions ajoutées sur le mappeur d'appareils en tant qu'écriture.
- Appliquez la mise à jour sur les périphériques de bloc.
- Si nécessaire, mappez les partitions sources sur le mappeur d'appareils en lecture seule. Cela est nécessaire pour le chargement latéral, car les partitions sources ne sont pas mappées avant la mise à jour.
- Appliquez une mise à jour complète ou delta à tous les périphériques de bloc dans l'emplacement cible slot.
- Installez les partitions pour exécuter le script post-installation, puis désinstallez-les.
- Désinstallez les partitions cibles.
Avant et après la mise à jour, les propriétés système suivantes doivent avoir les valeurs respectives :
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Ajouter des groupes et des partitions au fichier manifeste de mise à jour
Lorsque vous effectuez une mise à jour OTA sur un appareil A/B avec des partitions dynamiques, ou sur un appareil A/B qui ajoute la prise en charge des partitions dynamiques, vous devez ajouter des groupes et des partitions au fichier manifeste de mise à jour. L'extrait de code ci-dessous fournit des informations supplémentaires sur le fichier manifeste de mise à jour pour prendre en charge les partitions dynamiques. Pour obtenir une documentation détaillée sur chaque champ, consultez update_metadata.proto.
message DeltaArchiveManifest {
optional DynamicPartitionMetadata dynamic_partition_metadata;
}
message DynamicPartitionMetadata {
repeated DynamicPartitionGroup groups;
}
message DynamicPartitionGroup {
required string name;
optional uint64 size; // maximum size of group
repeated string partition_names;
}