Images DTB

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 permettant de spécifier les paramètres de l'image DTB) diffèrent selon les versions d'Android.

  • Sous Android 11, les appareils utilisant le noyau générique Image (GKI) sont compatibles avec le démarrage des fournisseurs partition, qui comprend toutes les informations spécifiques aux fournisseurs partition de démarrage. Étant donné que l'image DTB contient des données spécifiques au fournisseur, elle fait désormais partie 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 de l'image DTB, consultez Inclure l'image DTB 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 kernel image.gz pour créer le kernel + l'image DTB (qui est ensuite transmise à mkbootimg pour créer boot.img).

Format d'image DTB

Sous Android 10 ou version ultérieure, l'image DTB doit utiliser l'un des formats suivants :

  • Blobs DT concaténés l'un après l'autre. Le bootloader utilise le champ totalsize dans chaque en-tête FDT pour lire et analyser le blob correspondant.

  • Partitions DTB/DTBO. Le bootloader permet de sélectionner efficacement correctement le blob DT en examinant la structure dt_table_entry (contient id, rev et custom) pouvant contenir les informations d'identification du matériel pour l'entrée. Pour en savoir plus, consultez la section Partitions DTB/DTBO.

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. Android n'a donc plus besoin de prendre en charge les scripts qui ajoutent l'image DTB à image.gz dans le noyau, et peut utiliser le test Vendor Test Suite (VTS) pour vérifier (et normaliser) l'emplacement du DTB.

De plus, pour les appareils autres qu'A/B, il est plus sûr d'inclure le DTB dans l'image de récupération plutôt que dans une partition distincte afin d'éviter les problèmes causés par les mises à jour OTA interrompues. Au cours d'une mise à jour 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 exécutant 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
Kernel (pages l) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m pages) m = (ramdisk_size + page_size - 1)/page_size
Bootloader de deuxième niveau (n pages) n = (second_size + page_size - 1) / page_size
DTBO de récupération (pages o) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p pages) p = (dtb_size + page_size - 1) / page_size

Chemin d'accès à 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'il est ajouté à l'argument base, fournit l'adresse de chargement physique de l'arborescence d'appareils finale. Par exemple, si l'argument base est 0x10000000 et que l'argument dtb_offset est 0x01000000, dtb_addr_field dans l'en-tête de l'image de démarrage est renseigné en tant que 0x11000000.

La variable de configuration de la carte BOARD_PREBUILT_DTBIMAGE_DIR doit être utilisée 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 du répertoire spécifié par BOARD_PREBUILT_DTBIMAGE_DIR, la variable de configuration de la carte BOARD_INCLUDE_DTB_IN_BOOTIMG doit être définie sur true. Exemple :

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Vous pouvez ajouter l'argument dtb_offset à la variable de configuration de la carte BOARD_MKBOOTIMG_ARGS avec les autres décalages et la version de l'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 seul indice. 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.