Implémenter des DTO

L'implémentation des DTO (Device Tree Overlays) implique de diviser l'arborescence des périphériques (DT), de la compiler, de la partitionner et de l'exécuter. Une fois que vous avez une implémentation fonctionnelle, vous devez également maintenir la compatibilité entre les deux DT et déterminer une stratégie pour assurer la sécurité de chaque partition DT.

Diviser le DT

Commencez par diviser la DT en deux parties :

  • DT principal. La partie SoC uniquement et les configurations par défaut fournies par le fournisseur du SoC.
  • Overlay DT. Configurations spécifiques à l'appareil, fournies par l'ODM/OEM.

Après avoir divisé les DT, vous devez vous assurer de la compatibilité entre le DT principal et le DT de superposition afin que la fusion du DT principal et du DT de superposition aboutisse à un DT complet pour l'appareil. Pour en savoir plus sur le format et les règles des DTO, consultez Syntaxe des DTO. Pour en savoir plus sur les multiples DT, consultez Utiliser plusieurs DT.

Créer des DT principaux et de superposition

Pour créer le DT principal :

  1. Compilez le fichier .dts DT principal dans un fichier .dtb.
  2. Flashez le fichier .dtb dans une partition accessible par le bootloader au moment de l'exécution (détaillé dans [Partition DTs](#partition)).

Pour créer le DT de superposition :

  1. Compilez le DT de superposition .dts dans un fichier .dtbo. Bien que ce format de fichier soit identique au fichier .dtb formaté en tant que DT aplati, l'extension de fichier différente le distingue du DT principal.
  2. Flashez le fichier .dtbo dans une partition accessible par le bootloader au moment de l'exécution (détaillé dans [Partition DTs](#partition)).

Pour savoir comment compiler avec DTC et vérifier les résultats DTO sur l'hôte, consultez Compiler et vérifier.

Tables de données partitionnées

Déterminez un emplacement fiable et accessible au moment de l'exécution du bootloader dans la mémoire flash pour placer .dtb et .dtbo.

Exemples d'emplacements pour la DT principale :

  • Partie de la partition de démarrage, ajoutée au noyau (image.gz)
  • Séparer les blobs DT (.dtb) dans une partition dédiée (dtb)

Exemples d'emplacements pour la superposition DT :

Figure 1 : Placez .dtbo dans une partition odm (ne le faites que si votre bootloader est capable de charger des données à partir du système de fichiers d'une partition odm).

Figure 2. Placez .dtbo dans une partition unique, telle qu'une partition dtbo.

Remarque : La taille de la partition DT de superposition dépend de l'appareil et du nombre de modifications nécessaires en plus du blob DT principal. En général, 8 Mo suffisent amplement et permettent de s'adapter à une éventuelle croissance future.

Pour les appareils compatibles avec les mises à jour continues (A/B), effectuez un test A/B des partitions DT principales et de superposition :

Figure 3. Partition DTBO A/B, exemple 1.

Figure 4. Partition DTBO A/B, exemple 2.

Exécuter dans le bootloader

Pour exécuter :

Figure 5. Implémentation typique de l'exécution pour le DTO dans le bootloader.

  1. Chargez .dtb depuis le stockage dans la mémoire.
  2. Chargez .dtbo depuis le stockage dans la mémoire.
  3. Superposez .dtb avec .dtbo pour obtenir un DT fusionné.
  4. Démarrez le noyau en indiquant l'adresse mémoire du DT fusionné.

Maintenir la compatibilité

Le DTB principal (du fournisseur SoC) est traité comme une surface d'API pour les DTBO. Après avoir séparé le DT en une partie commune au SoC et une partie spécifique à l'appareil, vous devez veiller à ce que les deux parties restent mutuellement compatibles à l'avenir, y compris :

  • Définition du DT dans le DT principal. Par exemple, les nœuds, les propriétés et les libellés. Toute modification de la définition dans le DT principal peut entraîner des modifications dans le DT de superposition. Par exemple, pour corriger le nom d'un nœud dans le fichier DT principal, définissez un libellé "alias" qui correspond au nom de nœud d'origine (pour éviter de modifier le fichier DT de superposition).
  • Superposez l'adresse du magasin DT. Par exemple, le nom de la partition ou le format du magasin.

Assurer la sécurité

Le bootloader doit s'assurer que le DTB ou le DTBO sont sécurisés, non modifiés et non corrompus. Vous pouvez utiliser n'importe quelle solution pour sécuriser DTB ou DTBO, par exemple la signature de l'image de démarrage dans VBoot 1.0 ou le pied de page HASH AVB (VBoot 2.0).

  • Si DTB ou DTBO se trouve dans une partition unique, vous pouvez ajouter cette partition à la chaîne de confiance d'AVB. La chaîne de confiance commence par une racine de confiance protégée par le matériel et se poursuit jusqu'au bootloader, qui vérifie l'intégrité et l'authenticité de la partition DTB ou DTBO.
  • Si DTB ou DTBO se trouve dans une partition existante (telle que la partition odm), cette partition doit figurer dans la chaîne de confiance d'AVB. (La partition DTBO peut partager une clé publique avec la partition odm.)

Pour en savoir plus, consultez Démarrage validé.