Lors de l'exécution d'un FPGA avec un processeur ARM sous Linux, j'ai trouvé qu'il était bon d'utiliser un mécanisme appelé superposition de l'arborescence des périphériques en plus de l'arborescence des périphériques (comme la possibilité de configurer le FPGA). Je voudrais écrire sur la façon d'utiliser l'arborescence des appareils ** overlay **. (Principalement pour ceux qui développent Linux pour FPGA, nous vérifions uniquement le fonctionnement sur la machine réelle avec Intel FPGA: FPGA Config with DeviceTree Overlay (DE10nano) / eofz / items / 884b37e401c07a264d38)).
Le contenu de «l'arborescence des appareils» n'est pas inclus ici. Voir une autre source pour cela (également J'ai regardé dans l'arborescence des périphériques).
Le noyau charge l'arborescence de périphériques spécifiée à partir du chargeur de démarrage au moment du démarrage (arborescence de base). Normalement, les informations de l'arborescence des appareils ne peuvent pas être modifiées sans redémarrage, mais si vous utilisez l'arborescence des appareils ** overlay **, le contenu de l'arborescence de base peut être modifié. --Ajouter un nœud (= appareil)
La lecture et la suppression des fichiers de superposition modifie le contenu de l'arborescence des périphériques, et le contenu de l'arborescence des périphériques à ce stade est appelé l'arbre dynamique. Si la superposition de l'arborescence des périphériques n'est pas en cours d'exécution, alors live tree = base tree.
Le fichier de superposition de l'arborescence des périphériques a également une source de texte et un binaire, et est compilé avec dtc comme l'arborescence des périphériques. Pour le distinguer du fichier de l'arborescence des périphériques, l'extension de la source de superposition est .dtso et l'extension du binaire de superposition est .dtbo.
Le fichier de superposition minimum requis est le suivant.
minimum.dtso
/dts-v1/;
/plugin/;
/ {
fragment@0 { /*Le nom du nœud peut être n'importe quoi*/
target = <phandle>; /*phandle du nœud à superposer*/
/*Ou*/
target-path="/path"; /*chemin du nœud vers la superposition*/
__overlay__ {
/*Définitions de propriété à superposer*/
/*Définitions de noeud à superposer*/
};
};
};
Tout ce dont vous avez besoin est simple
--/ plugin /; ʻafter / dts-v1 /; au début --Noeud principal --Nœud enfant du nœud racine. Le nom du nœud peut être n'importe quoi --Donner au nœud enfant une propriété
target (ou
target-path) et un nœud
overlay --Spécifiez le nœud à superposer avec la propriété
target ou
target-path --Spécifié par phandle (ou label) dans
target --Spécifié par la chaîne de chemin dans
target-path --
overlay` Décrivez le contenu spécifique de la superposition dans le nœud
--Définissez les propriétés et les nœuds que vous souhaitez ajouter
Ce sera. Le / plugin /;
au début est de vous permettre de vous référer à l'étiquette définie dans l'arborescence des périphériques précédemment chargée (live tree) lors de l'écriture du fichier de superposition. Par exemple, vous pouvez utiliser le nom d'étiquette défini dans l'arborescence de base comme valeur de target
(même s'il y a une étiquette non définie dans ce fichier dans le fichier de superposition, dtc ne provoquera pas d'erreur).
Cependant, l'arborescence de base doit avoir l'option- @ pour inclure les informations de symbole dans .dtb lors de la compilation avec dtc (avec - @ pour .dtb créé avec Kernel Source dans le référentiel Git pour FPGA). Je pense qu'il a été compilé).
La source du noyau du référentiel Git maintenu par le fournisseur FPGA contient un pilote appelé ConfigFs, qui est disponible par défaut (à partir des références 1 et 2), nous allons donc utiliser ce mécanisme.
Ci-après, le chemin des configurations pour la superposition de l'arborescence des périphériques est $ OVL_PATH.
Série X: OVL_PATH = / configfs / device-tree / overlays
Série I: OVL_PATH = / sys / kernel / config / device-tree / overlays
(Pour la série X, il semble nécessaire de définir mkdir / configfs; mount -t configfs configfs / configfs
à l'avance.)
Cela se fait en deux étapes:
--Créez un répertoire avec n'importe quel nom sous le répertoire $ OVL_PATH.
Voici un exemple de création d'un répertoire my_overlay1_dir et de chargement d'un fichier de superposition appelé my_overlay1.dtbo. (En supposant une exécution en tant qu'utilisateur root)
# mkdir $OVL_PATH/my_overlay1_dir
# cat my_overlay1.dtbo > $OVL_PATH/my_overlay1_dir/dtbo
La suppression se fait en une seule étape.
--Supprimez le répertoire sous le répertoire $ OVL_PATH généré pour la superposition
Si vous souhaitez supprimer le contenu superposé dans l'exemple ci-dessus,
# rmdir $OVL_PATH/my_overlay1_dir
En plus de dtbo
, le chemin des fichiers et le statut sont automatiquement générés sous le répertoire créé pour la superposition.
path
est une interface qui peut effectuer une superposition comme dtbo
, mais elle lit le fichier de superposition placé sous / lib / firmware /, et abc. Sous / lib / firmware / par la commande suivante. Superposition avec dtbo.
# echo "abc.dtbo" > $OVL_PATH/my_overlay1_dir/path
status
est une interface qui peut connaître l'état du répertoire de superposition, et il est possible de savoir si la superposition est effectuée en utilisant dtbo ou le chemin de ce répertoire en citant.
# cat $OVL_PATH/my_overlay1_dir/status
/*appliqué ou non appliqué est imprimé*/
[Référence 1: Programmation Solution Zynq PL avec FPGA Manager](https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841645/Solution+Zynq+PL+Programming+With+FPGA+Manager# Test + Procédure-Utilisation + Appareil + Arbre + Superposition :) Référence 2: Rockeboards.org HowToCreate a DeviceTree J'ai essayé la superposition de l'arborescence des périphériques avec FPGA + SoC + Linux: l'article de @ ikwzm, je me réfère toujours à lui m (--- ) m
Recommended Posts