Compatible avec Android 10 partitions dynamiques, un partitionnement de l'espace utilisateur capable de créer, redimensionner et détruire des partitions lors des mises à jour Over The Air (OTA).
Cette page explique comment les clients OTA redimensionnent les partitions dynamiques lors d'une mise à jour pour les appareils A/B lancé sans prise en charge des partitions dynamiques et comment les clients OTA passent à Android 10.
Arrière-plan
Lors de la mise à jour d'un périphérique A/B pour prendre en charge les partitions dynamiques, le
La table de partitionnement GUID (GPT) sur l'appareil est conservée.
super
sur l'appareil. Les métadonnées sont stockées
system_a
et system_b
, mais il peut s'agir
personnalisé en modifiant BOARD_SUPER_PARTITION_METADATA_DEVICE
.
Chacun des appareils de stockage en mode bloc comporte deux emplacements de métadonnées. Une seule
l'emplacement de métadonnées dans
chaque appareil de stockage en mode bloc est utilisé. Par exemple, les métadonnées 0 à
system_a
et métadonnées 1 à system_b
correspondent aux partitions des emplacements A et B, respectivement. À
peu importe l'emplacement mis à jour.
Sur cette page, les emplacements de métadonnées sont appelés
(source) et Metadata T (cible). De même, les partitions sont appelées
par system_s
, vendor_t
, etc.
Pour en savoir plus sur la création de configurations système, consultez Mettre à niveau des appareils
Pour plus d'informations sur la manière dont les partitions appartiennent à mettre à jour groupes, consultez Conseil modifications de configuration pour les nouveaux appareils.
Voici un exemple de métadonnées sur un appareil:
- Appareil de stockage en mode bloc physique
system_a
<ph type="x-smartling-placeholder">- </ph>
- Métadonnées 0
<ph type="x-smartling-placeholder">
- </ph>
- Groupe
foo_a
<ph type="x-smartling-placeholder">- </ph>
- Partition logique (dynamique)
system_a
- Partition logique (dynamique)
product_services_a
- Autres partitions mises à jour par Foo
- Partition logique (dynamique)
- Groupe
bar_a
<ph type="x-smartling-placeholder">- </ph>
- Partition logique (dynamique)
vendor_a
- Partition logique (dynamique)
product_a
- Autres partitions mises à jour par Bar
- Partition logique (dynamique)
- Groupe
- Métadonnées 1 (non utilisées)
- Métadonnées 0
<ph type="x-smartling-placeholder">
- Appareil de stockage en mode bloc physique
system_b
<ph type="x-smartling-placeholder">- </ph>
- Métadonnées 0 (non utilisées)
- Métadonnées 1
<ph type="x-smartling-placeholder">
- </ph>
- Groupe foo_b
<ph type="x-smartling-placeholder">
- </ph>
- Partition logique (dynamique)
system_b
- Partition logique (dynamique)
product_services_b
- Autres partitions mises à jour par Foo
- Partition logique (dynamique)
- Groupe bar_b
<ph type="x-smartling-placeholder">
- </ph>
- Partition logique (dynamique)
vendor_b
- Partition logique (dynamique)
product_b
- Autres partitions mises à jour par Bar
- Partition logique (dynamique)
- Groupe foo_b
<ph type="x-smartling-placeholder">
Vous pouvez utiliser l'outil lpdump
sous
system/extras/partition_tools
pour vider les métadonnées
votre appareil. Exemple :
lpdump --slot 0 /dev/block/by-name/system_a
lpdump --slot 1 /dev/block/by-name/system_b
Remettre à jour une mise à jour
Sur les appareils équipés d'Android 9 ou version antérieure, le client OTA de l'appareil n'est pas compatible avec le mappage des partitions dynamiques avant la mise à jour. Une un ensemble supplémentaire de correctifs est créé afin que le mappage aux partitions physiques existantes.
Le générateur OTA crée le fichier super.img
final qui
contient le contenu de toutes les partitions dynamiques, puis divise l'image
en plusieurs images correspondant à la taille des appareils de stockage en mode bloc physiques
correspondant au système, au fournisseur, etc. Ces images sont nommées
super_system.img
, super_vendor.img
, etc.
Le client OTA applique ces images
aux partitions physiques, au lieu
que l'application d'images pour les
partitions logiques (dynamiques).
Comme le client OTA ne sait pas comment mapper des partitions dynamiques, toutes les étapes post-installation sont automatiquement désactivées pour ces partitions lorsque le package de mise à jour est généré. Voir Configurer après l'installation pour en savoir plus.
Le flux de mise à jour est le même que sous Android 9.
Avant la mise à jour:
ro.boot.dynamic_partitions= ro.boot.dynamic_partitions_retrofit=
Après la mise à jour:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Prochaines mises à jour après la rénovation
Après la mise à jour rétrofit, le client OTA est mis à jour pour fonctionner avec les partitions dynamiques. Les extensions des partitions sources ne couvrent jamais sur des partitions physiques cibles.
Flux de mise à jour à l'aide d'un package de mise à jour standard
- Initialisez les métadonnées de la partition
super
.-
Construire les nouvelles métadonnées M à partir des Métadonnées S (métadonnées sources).
Par exemple, si Metadata S utilise [
system_s
,vendor_s
,product_s
] comme bloc appareils, la nouvelle métadonnée M utilise [system_t
,vendor_t
,product_t
] comme bloc appareils. Tous les groupes et partitions sont supprimés dans M. -
Ajoutez des groupes cibles et des partitions en fonction du
Champ
dynamic_partition_metadata
dans la mise à jour fichier manifeste. La taille de chaque partition est indiquée dansnew_partition_info
- Écrire M dans Métadonnées T.
- Mappez les partitions ajoutées sur le mappeur d'appareil en tant qu'entrées accessibles en écriture.
-
Construire les nouvelles métadonnées M à partir des Métadonnées S (métadonnées sources).
Par exemple, si Metadata S utilise [
- Appliquez la mise à jour sur les appareils de stockage en mode bloc.
- Si nécessaire, mappez les partitions sources sur le mappeur d'appareils. en lecture seule. Cette étape est nécessaire pour le téléchargement indépendant, les partitions sources ne sont pas mappées avant la mise à jour.
- Appliquez une mise à jour complète ou delta à tous les appareils de stockage en mode bloc au niveau du emplacement cible.
- installer les partitions pour exécuter le script post-installation, puis démonter les partitions.
- Annulez le mappage des partitions cibles.
Flux de mise à jour à l'aide d'un package de mise à jour Retrofit
Si le package de mise à jour
Retrofit est appliqué à un appareil qui
active les partitions dynamiques, le client OTA applique la répartition
super.img
directement sur les appareils de stockage en mode bloc. La mise à jour
est semblable à une mise à jour rétrofit. Voir
Réaménagement d'une mise à jour
pour en savoir plus.
Par exemple, supposons ce qui suit:
- L'emplacement A est l'emplacement actif.
-
system_a
contient les métadonnées actives au niveau de l'emplacement 0. -
system_a
,vendor_a
et Lesproduct_a
sont utilisés comme appareils de stockage en mode bloc.
Lorsque le client OTA reçoit un package de mise à jour Retrofit, il applique
super_system.img
sur le system_b
physique
super_vendor.img
sur le vendor_b
physique
super_product.img
sur le product_b
physique.
L'appareil de stockage en mode bloc physique system_b
contient
pour mapper les éléments logiques system_b
,
vendor_b
et product_b
au démarrage.
Générer des packages de mise à jour
OTA supplémentaire
Lors de la génération d'OTA incrémentiels pour les appareils réajustés, les mises à jour
dépend de si la compilation de base définit ou non
PRODUCT_USE_DYNAMIC_PARTITIONS
et
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
-
Si la compilation de base ne définit pas les variables, il s'agit d'un
de l'ajustement des enchères. Le package de mise à jour contient la division
super.img
et désactive l'étape post-installation. - Si la compilation de base définit les variables, c'est la même chose qu'un avec des partitions dynamiques. Package de mise à jour contient les images des partitions logiques (dynamiques). La l'étape post-installation peut être activée.
OTA complète
Deux packages OTA complets sont générés pour les appareils de mise à niveau.
-
$(PRODUCT)-ota-retrofit-$(TAG).zip
contient toujours Divisersuper.img
et désactiver l'étape post-installation pour la mise à jour du réaménagement.-
Il est généré avec un argument supplémentaire
--retrofit_dynamic_partitions
jusqu'à Scriptota_from_target_files
. - Il peut être appliqué à toutes les compilations.
-
Il est généré avec un argument supplémentaire
-
$(PRODUCT)-ota-$(TAG).zip
contient des images logiques pour les prochaines mises à jour.- Appliquer uniquement aux builds avec des partitions dynamiques est activé. Pour en savoir plus, consultez les informations ci-dessous.
Refuser la mise à jour non rétrofit sur les anciens builds
Appliquez le package OTA complet standard uniquement aux builds avec partitions dynamiques activées. Si le serveur OTA est configuré de manière incorrecte et transmet ces packages aux appareils équipés d'Android 9 ou inférieur, les appareils ne démarrent pas. Le client OTA sur Android 9 et ne sait pas faire la différence entre un package OTA de rénovation et un un package OTA complet standard, de sorte que le client ne le rejette pas.
Pour empêcher l'appareil d'accepter le package OTA complet, vous pouvez nécessitent une étape post-installation pour vérifier l'appareil existant configuration. Exemple :
device/device_name/dynamic_partitions/check_dynamic_partitions
#!/system/bin/sh DP_PROPERTY_NAME="ro.boot.dynamic_partitions" DP_RETROFIT_PROPERTY_NAME="ro.boot.dynamic_partitions_retrofit" DP_PROPERTY=$(getprop ${DP_PROPERTY_NAME}) DP_RETROFIT_PROPERTY=$(getprop ${DP_RETROFIT_PROPERTY_NAME}) if [ "${DP_PROPERTY}" != "true" ] || [ "${DP_RETROFIT_PROPERTY}" != "true" ] ; then echo "Error: applied non-retrofit update on build without dynamic" \ "partitions." echo "${DP_PROPERTY_NAME}=${DP_PROPERTY}" echo "${DP_RETROFIT_PROPERTY_NAME}=${DP_RETROFIT_PROPERTY}" exit 1 fi
device/device_name/dynamic_partitions/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= check_dynamic_partitions LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := check_dynamic_partitions LOCAL_PRODUCT_MODULE := true include $(BUILD_PREBUILT)
device/device_name/device.mk
PRODUCT_PACKAGES += check_dynamic_partitions # OPTIONAL=false so that the error in check_dynamic_partitions will be # propagated to OTA client. AB_OTA_POSTINSTALL_CONFIG += \ RUN_POSTINSTALL_product=true \ POSTINSTALL_PATH_product=bin/check_dynamic_partitions \ FILESYSTEM_TYPE_product=ext4 \ POSTINSTALL_OPTIONAL_product=false \
Lorsque le package OTA standard est appliqué à un appareil sans
partitions activées, le client OTA s'exécute
check_dynamic_partitions
en tant qu'étape post-installation et
refuse la mise à jour.