L'implémentation de superpositions d'arborescence d'appareils (DTO) implique de diviser l'arborescence d'appareils (AO), de la créer, de la partitionner et de l'exécuter. Une fois que vous avez une implémentation fonctionnelle, vous devez également assurer 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 table de données en deux parties:
- DT principal. La partie SoC uniquement et les configurations par défaut, fournies par le fournisseur de SoC.
- Superposition 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 la syntaxe DTO. Pour en savoir plus sur les DT multiples, consultez la section Utiliser plusieurs DT.
Créer des DT principales et superposées
Pour créer la table de données principale:
- Complétez le fichier
.dts
DT principal dans un fichier.dtb
. - Flashez le fichier
.dtb
dans une partition accessible au moment de l'exécution du bootloader (décrite dans [Partition DTs](#partition)).
Pour créer le DT de superposition:
- Complétez le fichier DT
.dts
de superposition dans un fichier.dtbo
. Bien que ce format de fichier soit identique à celui du fichier.dtb
au format DT aplati, l'extension de fichier différente le distingue du DT principal. - Flashez le fichier
.dtbo
dans une partition accessible au moment de l'exécution du bootloader (décrite dans [Partition DTs](#partition)).
Pour en savoir plus sur la compilation avec DTC et la validation des résultats DTO sur l'hôte, consultez la section Compilation et validation.
Tables de partitionnement DT
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 le DT principal:
- Partie de la partition de démarrage, ajoutée au noyau (
image.gz
) - Blobs DT distincts (
.dtb
) dans une partition dédiée (dtb
)
Exemples d'emplacements pour le DT de superposition:
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 le fichier .dtbo dans une partition unique, telle qu'une partition dtbo.
Remarque:La taille de la partition DT en superposition dépend de l'appareil et de la quantité de modifications nécessaires au-dessus du blob DT principal. En règle générale, 8 Mo suffisent amplement et permettent de laisser de la place pour l'avenir, si nécessaire.
Pour les appareils compatibles avec les mises à jour fluides (A/B), A/B les partitions DT principales et DT superposées:
Figure 3. Partition DTBO A/B, exemple 1.
Figure 4. Partition A/B DTBO, exemple 2.
Exécuter dans le bootloader
Pour exécuter:
Figure 5. Implémentation d'exécution typique pour le DTO dans le bootloader.
- Chargez
.dtb
à partir du stockage dans la mémoire. - Chargez
.dtbo
à partir du stockage dans la mémoire. - Superposer
.dtb
à.dtbo
pour obtenir un DT fusionné. - Démarrer le noyau en fonction de l'adresse mémoire de la table de données fusionnée.
Maintenir la compatibilité
Le DTB principal (du fournisseur de SoC) est traité comme une surface d'API pour les DTBO. Après avoir séparé la DT en une partie commune au SoC et une partie spécifique à l'appareil, vous devez maintenir les deux parties mutuellement compatibles à l'avenir, y compris:
- Définition de la table de données dans la table de données principale. Par exemple, nœuds, propriétés, libellés. Toute modification de définition dans le DT principal peut entraîner des modifications dans le DT de superposition. Par exemple, pour corriger un nom de nœud dans la table de données principale, définissez un libellé "alias" qui correspond au nom de nœud d'origine (pour éviter de modifier la table de données en superposition).
- Superposition de l'emplacement du magasin DT (par exemple, nom de la partition, format de stockage)
Assurer la sécurité
Le bootloader doit s'assurer que le DTB ou le DTBO est sécurisé, non modifié et non corrompu. Vous pouvez utiliser n'importe quelle solution pour sécuriser le DTB ou le DTBO, par exemple la signature de l'image de démarrage dans VBoot 1.0 ou le pied de page AVB HASH (VBoot 2.0).
- Si le DTB ou le 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 à partir d'une racine de confiance protégée matériellement et se termine au bootloader, qui vérifie l'intégrité et l'authenticité de la partition DTB ou DTBO.
- Si le DTB ou le 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 partitionodm
).
Pour en savoir plus, consultez la section Démarrage validé.