Compiler et vérifier

Vous pouvez utiliser DTC pour compiler la source de l'arborescence de l'appareil (DTS). . Toutefois, avant d'appliquer l'arborescence d'appareils en superposition sur la DT principale cible, vous devez doit également vérifier le résultat en simulant le comportement de la superposition de l'arborescence de périphériques (DTO).

Compiler avec DTC

Lorsque vous utilisez dtc pour compiler .dts, vous devez ajouter l'option -@ pour ajouter un nœud __symbols__ dans le .dtbo obtenu. Le nœud __symbols__ contient liste de tous les nœuds marqués d'une étiquette, que la bibliothèque DTO peut utiliser pour les références.

Exemple de commande pour compiler le fichier .dts principal du transfert de données:

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

Exemple de commande pour créer la superposition DT .dts:

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

Vérifier les résultats DTO sur l'hôte

La validation peut vous aider à identifier les erreurs qui peuvent se produire lorsque vous placez la DT superposée sur la DT principale. Avant de mettre à jour la cible, vous pouvez vérifier résultat de la superposition de DT sur l'hôte en simulant le comportement de DTO à l'aide de /include/ dans .dts.

Figure 1 : Utilisez la syntaxe /include/ pour simuler DTO sur l'hôte.

  1. Créez une copie de la superposition .dts. Dans la copie, supprimez le l'en-tête de première ligne. Exemple :
    /dts-v1/;
    /plugin/;
    
    Enregistrez le fichier sous le nom my_overlay_dt_wo_header.dts (ou toute autre le nom de fichier souhaité).
  2. Créez une copie du .dts principal. Dans le texte, après la dernière ligne, ajoutez la syntaxe d'inclusion pour le fichier que vous avez créé à l'étape 1. Exemple :
    /include/ "my_overlay_dt_wo_header.dts"
    
    Enregistrez le fichier sous le nom my_main_dt_with_include.dts (ou toute autre le nom de fichier souhaité).
  3. Utiliser dtc pour compiler my_main_dt_with_include.dts pour obtenir le transfert de données fusionné, ce qui devrait sera le même résultat que la DTO. Exemple :
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. Utilisez dtc pour vider my_merged_dt.dto.
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Valider DTO dans Android 9

Android 9 nécessite une superposition de blob d'arborescence d'appareil (DTBO). Ajouter des nœuds ou modifier les propriétés du SoC DT, le bootloader doit superposer de manière dynamique un DT spécifique à l’appareil sur le SoC DT.

Indiquer les superpositions appliquées

Pour activer le Vendor Test Suite (VTS) pour évaluer l'exactitude de la superposition application, les fournisseurs doivent ajouter un nouveau paramètre de ligne de commande du noyau androidboot.dtbo_idx qui indique les superpositions sélectionnées dans la partition DTBO. Sous Android 12 avec la version de noyau version 5.10 ou ultérieure, ce paramètre passe par bootconfig. Par exemple, le paramètre androidboot.dtbo_idx=x,y,z signale x, y et z comme indices de base zéro de les DTO de la partition DTBO appliquées (dans cet ordre) par le bootloader à la DT de base.

Les superpositions peuvent s'appliquer aux nœuds du DT principal ou ajouter de nouveaux nœuds, mais ne peut pas faire référence à un nœud ajouté dans une superposition précédente. Ce est nécessaire, car l'application en superposition ne fusionne pas la table de symboles de superposition avec la table de symboles DT principale (l'absence de fusion permet d'éviter les conflits dans les noms de symboles et la complication des dépendances entre superpositions).

Exemple: superpositions non valides

Dans cet exemple, overlay_2.dts fait référence au nœud e , ajouté par overlay_1.dts Une fois que overlay_1 a été appliqué DT principale, si vous tentez d'appliquer overlay_2 à la DT résultant, l'application de superposition échoue avec une erreur indiquant que le symbole e n'est pas présent dans le tableau des symboles pour le paramètre DT de base.

main.dts superposition_1.dts superposition_2.dts
[main.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;

&b { ref1 =  <&a>;
    e: e {
        prop = <0x0a>;
        phandle = <0x04>;
    };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* invalid! */
&e {
    prop = <0x0b>;
};

Exemple: superpositions valides

Dans cet exemple, overlay_2.dts fait uniquement référence au nœud b à partir du DTS principal. Quand ? overlay_1 est appliqué au DT de base, puis suivi du application de overlay_2, la valeur de la propriété prop dans le nœud e (définie par overlay_1.dts) est remplacé par la valeur définie par overlay_2.dts

main.dts superposition_1.dts superposition_2.dts
[final.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;


&b { ref1 =  <&a>;
     e {
          prop = <0x0c>;
      };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* valid */
&b { ref1 =  <&c>;
     e {
          prop = <0x0d>;
      };
};

Implémenter la partition DTBO

Pour implémenter la partition DTBO requise, assurez-vous que le bootloader peut effectuer la suivantes:

  1. Identifiez le tableau sur lequel il est exécuté et sélectionnez le superpositions à appliquer.
  2. Ajoutez le paramètre androidboot.dtbo_idx au noyau de la ligne de commande.
    • Ce paramètre doit indiquer les indices de base zéro des DTO de l'image de partition DTBO appliquée à la DT de base (dans le même commande).
    • Les index doivent faire référence à la position de la superposition dans le ciblage par types d'appareil. partition.

Pour en savoir plus sur la structure de la partition DTBO, consultez Superpositions d'arborescence de périphériques.

Valider la partition DTBO

Vous pouvez utiliser VTS pour vérifier les éléments suivants:

  • Existence du paramètre de ligne de commande du noyau androidboot.dtbo_idx (en vérifiant que Init a configure automatiquement le système ro.boot.dtbo_idx correspondant .
  • Validité de la propriété système ro.boot.dtbo_idx (par en vérifiant que la propriété spécifie au moins une image DTBO valide l'index).
  • Validité de la partition DTBO (vérifie également les superpositions dans le DTBO qui sont appliquées à la DT de base).
  • Des nœuds supplémentaires ou des modifications de propriété sont présentés dans le DT résultant. au noyau Linux.

Par exemple, dans les superpositions suivantes et la DT finale, l'ajout androidboot.dtbo_idx=5,3 à la ligne de commande du noyau transmet validation, mais en ajoutant androidboot.dtbo_idx=3,5 au noyau la ligne de commande ne réussit pas la validation.

Superposition DT à l'index 3 Superposition DT à l'index 5
[overlay_1.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xfe>; };
[overlay_2.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
DT finale

/dts-v1/
/ {

	un {
		phandle = <0x1>;
	}

	b
		phandle = <0x2>;
	}

	c {
		phandle = <0x3>;
		prop = <0xfe>;

	}

	__symbols__ {
		a = "/a";
		b = "/b";
		c = "/c";

	}
}