Les implémentations Android peuvent inclure une image DTB (Device tree blob) utilisable par le bootloader. L'emplacement de l'image DTB (et les options de spécification paramètres d'image DTB) diffère selon les versions d'Android.
Sous Android 11, les appareils utilisant le noyau générique l'image (GKI) doit sont compatibles avec le démarrage des fournisseurs partition, qui comprend toutes les informations spécifiques aux fournisseurs partition de démarrage. Comme l'image DTB contient des données spécifiques au fournisseur, elle est maintenant de la partition de démarrage du fournisseur. Pour spécifier les paramètres d'image DTB, voir Démarrage fournisseur en-tête.
Sous Android 10, les appareils peuvent inclure l'image DTB dans la partition de démarrage. Pour spécifier les paramètres d'image de ciblage par niveau d'appareil, voir Inclure le ciblage par niveau d'appareil dans l'image de démarrage.
Sous Android 9 et versions antérieures, l'image DTB peut exister dans sa propre partition ou être ajoutée au noyau
image.gz
pour créer le noyau + Image DTB (qui est ensuite transmise àmkbootimg
pour créerboot.img
).
Format d'image DTB
Sous Android 10 ou version ultérieure, l'image DTB doit utiliser une des formats suivants:
Blobs DT concaténés l'un après l'autre. Le bootloader utilise
totalsize
dans chaque en-tête FDT pour lire et analyser l'objet blob correspondant.Partitions DTB/DTBO Le bootloader permet de sélectionner efficacement correctement le blob DT en examinant la structure
dt_table_entry
(contientid
,rev
etcustom
) pouvant contenir les informations d'identification du matériel pour l'entrée. Pour plus d'informations, reportez-vous à la section DTB/DTBO Partitions.
Inclure l'image DTB dans l'image de démarrage
Les appareils équipés d'Android 10 peuvent inclure l'image DTB dans
l'image de démarrage. Ainsi, Android n'a plus besoin de prendre en charge les scripts qui ajoutent
l'image DTB sur image.gz
dans le noyau et permet d'utiliser les fonctions Vendor Test
Test de la suite (VTS) pour valider (et standardiser) le ciblage par niveau d'appareil
l'emplacement.
De plus, pour les appareils autres que A/B, il est plus sûr d'intégrer le ciblage par niveau d'appareil dans le plutôt que dans une partition distincte pour éviter les problèmes des mises à jour OTA interrompues. Pendant une OTA, si un problème survient après que la partition DTB est (mais avant la fin de la mise à jour complète), l'appareil tente de démarrer mode récupération pour effectuer la mise à jour OTA ; Cependant, comme la partition DTB a a déjà été mise à jour, l'image de récupération peut ne pas correspondre (avec n'ont pas encore été mises à jour). Inclure l'image DTB dans le format de l'image de démarrage empêche de tels problèmes en faisant en sorte que l'image de récupération soit suffisante ne dépend pas d'une autre partition).
Structure de l'image de démarrage
Les appareils équipés d'Android 10 peuvent inclure une image DTB. à l'aide de la structure d'image de démarrage suivante.
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 |
DTBO de récupération (o pages) | o = (recovery_dtbo_size + page_size -
1) / page_size |
DTB (p pages) | p = (dtb_size + page_size -
1) / page_size |
Chemin d'accès de l'image DTB
Pour les appareils équipés d'Android 10, vous pouvez utiliser le
L'outil mkbootimg.py
et les arguments suivants pour spécifier le chemin d'accès au DTB
l'image.
Argument | Description |
---|---|
dtb |
Chemin d'accès à l'image DTB à inclure dans les images de démarrage/récupération. |
dtb_offset |
Lorsqu'elle est ajoutée à l'argument base , elle indique la charge physique
pour l'arborescence finale des appareils. Par exemple, si base
est 0x10000000 et l'argument dtb_offset
est 0x01000000 , le dtb_addr_field dans l'image de démarrage
est renseigné sous la forme 0x11000000 . |
Vous devez utiliser la variable de configuration du tableau BOARD_PREBUILT_DTBIMAGE_DIR
pour spécifier
le chemin d'accès à l'image DTB. Si plusieurs fichiers comportant l'extension *.dtb
sont
présent dans le répertoire BOARD_PREBUILT_DTBIMAGE_DIR
, le système de compilation Android
concatène les fichiers pour créer l'image DTB finale utilisée dans l'image de démarrage.
création.
Pour transmettre l'argument dtb
à mkbootimg.py
avec l'image DTB de la
spécifié par BOARD_PREBUILT_DTBIMAGE_DIR
, la variable de configuration du tableau
BOARD_INCLUDE_DTB_IN_BOOTIMG
doit être défini sur true
. Exemple :
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Vous pouvez ajouter l'argument dtb_offset
à la carte BOARD_MKBOOTIMG_ARGS
de configuration avec les autres décalages et la version d'en-tête. Exemple :
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Compatibilité avec le bootloader
Pour que VTS fonctionne correctement sur les appareils équipés d'Android
10, le bootloader doit être compatible avec l'image de démarrage mise à jour
et devez ajouter le paramètre de ligne de commande du noyau androidboot.dtb_idx
pour indiquer
l'index de l'arborescence des appareils (DT) sélectionnée. Vous ne pouvez spécifier qu'un (1)
de l'index. Par exemple, le paramètre androidboot.dtb_idx=N
indique N
comme
index basé sur zéro de l'arborescence de périphériques sélectionnée par le bootloader dans l'ensemble des
DTB présents dans l'image de démarrage.