Sur les appareils non A/B, l'image de récupération doit contenir les informations issues d'un blob d'arborescence de l'appareil (DTB) ou Configuration avancée et interface d'alimentation (ACPI) en superposition. Lorsque ces démarrent lors de la récupération, le bootloader peut alors charger l'image de superposition qui est compatible avec l'image de récupération. Appareils qui prennent en charge les tests A/B (fluides) les mises à jour doivent utiliser la récupération comme démarrage partition de récupération distincte (pour plus de détails, voir Implémentation des tests A/B ).
Les options permettant d'inclure une valeur DTBO/ACPIO de récupération dans le cadre du démarrage/de la récupération diffèrent d'une version d'Android à l'autre.
Version | Mettre à jour le schéma | Conformité avec GKI | Version de l'en-tête de démarrage (lancement des appareils) | Version de l'en-tête de démarrage (mise à niveau des appareils) | Image de récupération dédiée requise |
---|---|---|---|---|---|
11 | A/B, Virtual A/B |
Oui | 3* | N/A | Non |
A/B, Virtual A/B |
Non | 2, 3. | 0, 1, 2, 3 | Non | |
non-A/B | Oui | 3 | N/A | Oui | |
non-A/B | Non | 2, 3. | 0, 1, 2, 3 | Oui | |
10 (Q) | A/B | N/A | 2 | 0, 1, 2 | Non |
non-A/B | N/A | 2 | 0, 1, 2 | Oui | |
9 (P) | A/B | N/A | 1 | 0, 1 | Non |
non-A/B | N/A | 1 | 0, 1 | Oui | |
8 (O) | A/B | N/A | N/A (valeur considérée comme 0) | N/A (valeur considérée comme 0) | Non |
non-A/B | N/A | N/A (valeur considérée comme 0) | N/A (valeur considérée comme 0) | Oui |
* Appareils A/B équipés d'Android version 11 ou ultérieure et avec l'image générique du noyau (GKI) doit utiliser un version d'en-tête principale de 3 soit compatible avec le démarrage fournisseur partition.
Points essentiels:
Les appareils A/B n'ont pas besoin de spécifier d'image de récupération, car les mises à jour A/B utilisent deux ensembles de partitions (y compris
boot
etdtbo
) et basculer de l'une à l'autre pendant et les mises à jour, éliminant ainsi la nécessité d'une image de récupération. Les appareils A/B peuvent utiliser une image de récupération dédiée.Appareils non A/B équipés d'Android 11 ou version ultérieure Si vous utilisez un en-tête de démarrage version 3, vous devez spécifier explicitement un en-tête de démarrage version 2 pour l'image de récupération séparément. Exemple :
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Pour les architectures non compatibles avec les arborescences d'appareils, inclure une image ACPIO au lieu d'une image DTBO.
À propos des échecs OTA et des images de récupération
Pour éviter les défaillances OTA (Over The Air) sur les appareils autres que A/B, l'image de récupération doivent être autonomes et indépendantes des autres images. Lors d'une mise à jour OTA, si un problème survient après la mise à jour de l'image de superposition (mais avant que la mise à jour complète), l'appareil tente de démarrer en mode récupération terminez la mise à jour OTA. Toutefois, comme la partition de superposition a déjà été mise à jour, l'image de récupération (qui n'a pas été mis à jour).
Pour empêcher la récupération de dépendre de la partition DTBO/ACPIO pendant une mise à jour, appareils non-A/B équipés d'Android 9 ou version ultérieure Vous pouvez spécifier une image de récupération DTBO/ACPIO contenant des informations issues de la superposition. image de démarrage en tant que section distincte du format d'image de démarrage (vous devez utiliser un en-tête de démarrage) version 1 ou 2).
Modifications de l'image de démarrage
Pour permettre à l'image de récupération de contenir le service de récupération DTBO ou ACPIO sur des serveurs autres que A/B appareils équipés d'Android 9 ou version ultérieure, mettez à jour le système de démarrage comme suit.
Section de l'image de démarrage | Nombre de pages |
---|---|
En-tête de démarrage (1 page) | 1 |
Noyau (l pages) | l = (kernel_size + page_size -
1) / page_size |
Ramdisk (m pages) | m = (ramdisk_size + page_size -
1) / page_size |
bootloader de deuxième étape (n pages) | n = (second_size + page_size -
1) / page_size |
Récupération DTBO ou ACPIO (o pages) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Pour en savoir plus sur les arguments de l'outil mkbootimg
permettant de spécifier l'image de démarrage
version d'en-tête et chemins d'accès des images de superposition, consultez la section En-tête de l'image de démarrage
Gestion des versions
Implémenter DTBO
Les appareils non-A/B exécutant la version 9 ou ultérieure peuvent remplir le champ
Section recovery_dtbo
de l'image de récupération. Pour inclure le recovery_dtbo
image dans recovery.img
, sur l'appareil BoardConfig.mk
:
Définissez la configuration
BOARD_INCLUDE_RECOVERY_DTBO
surtrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Étendez la variable
BOARD_MKBOOTIMG_ARGS
pour spécifier l'en-tête de l'image de démarrage. version:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Assurez-vous que la variable
BOARD_PREBUILT_DTBOIMAGE
est définie sur le chemin d'accès Image DTBO. Le système de compilation Android utilise la variable pour définir le l'argumentrecovery_dtbo
de l'outilmkbootimg
lors de la création de de l'image de récupération.
Si BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
et
Les variables BOARD_PREBUILT_DTBOIMAGE
sont correctement définies, le système de compilation Android
inclut le DTBO spécifié par la variable BOARD_PREBUILT_DTBOIMAGE
dans
recovery.img
Implémenter ACPIO
Les appareils non-A/B équipés d'Android 9 ou version ultérieure peuvent utiliser
une image de superposition ACPIO (au lieu d'une image DTBO) et peut remplir
Section recovery_acpio
(au lieu de la section recovery_dtbo
) du
de l'image de récupération. Pour inclure l'image recovery_acpio
dans recovery.img
, dans la section
appareil BoardConfig.mk
:
Définissez la configuration
BOARD_INCLUDE_RECOVERY_ACPIO
surtrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Étendez la variable
BOARD_MKBOOTIMG_ARGS
pour spécifier l'en-tête de l'image de démarrage. version. La variable doit être supérieure ou égale à 1 pour permettre la récupération ACPIOBOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Assurez-vous que la variable
BOARD_RECOVERY_ACPIO
est définie sur le chemin d'accès Image ACPIO Le système de compilation Android utilise la variable pour définir le l'argumentrecovery_acpio
de l'outilmkbootimg
lors de la création de de l'image de récupération.
Si BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
et
Les variables BOARD_RECOVERY_ACPIO
sont correctement définies, le système de compilation Android
inclut l'ACPIO spécifié par la variable BOARD_RECOVERY_ACPIO
dans
recovery.img