[LINUX] J'ai étudié la superposition de l'arborescence des appareils

1.Tout d'abord

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).

Ce que vous pouvez faire avec Devicetree Overlay

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.

Comment écrire un fichier de superposition Devicetree

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) danstarget --Spécifié par la chaîne de chemin danstarget-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é).

Comment exécuter Devicetree Overlay

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.)

Implémentation de superposition

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 

Supprimer la superposition

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

Autres caractéristiques

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é*/

Matériel de référence

[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

J'ai étudié la superposition de l'arborescence des appareils
J'ai examiné l'arborescence des appareils
J'ai étudié le mécanisme de connexion flask!
J'ai étudié à quoi ressemble la lunette
J'ai étudié le mécanisme de connexion flask!
J'ai étudié à quoi ressemble la lunette
J'ai étudié la superposition de l'arborescence des appareils
J'ai compté les grains
J'ai étudié le prétraitement qui peut être fait avec PyCaret
J'ai commencé PYNQ (2) -Overlay self-made-
J'ai tweeté depuis le terminal!
J'ai essayé de toucher l'API Qiita
J'ai téléchargé la source python
J'ai lu l'article de SHAP
Vérifiez l'utilisation du périphérique d'E / S du serveur avec la commande Linux iostat
J'ai étudié la méthode X-means qui estime automatiquement le nombre de clusters
J'ai étudié le comportement de la différence entre lien dur et lien symbolique
J'ai étudié la relation entre le LSTM avec état de Keras et l'état caché