Beim Ausführen eines FPGA mit einer ARM-CPU unter Linux fand ich es nützlich, zusätzlich zum Gerätebaum einen Mechanismus namens Gerätebaum-Overlay zu verwenden (z. B. das FPGA konfigurieren zu können). Ich möchte darüber schreiben, wie man den Gerätebaum ** Overlay ** verwendet. (Hauptsächlich für diejenigen, die Linux für FPGA entwickeln, überprüfen wir den Betrieb auf dem tatsächlichen Computer nur mit Intel FPGA: [FPGA-Konfiguration mit DeviceTree Overlay (DE10nano)](https://qiita.com / eofz / items / 884b37e401c07a264d38)).
Der Inhalt des "Gerätebaums" ist hier nicht enthalten. Siehe dazu eine andere Quelle (auch Ich habe in den Gerätebaum geschaut).
Der Kernel lädt den angegebenen Gerätebaum beim Booten aus dem Bootloader (Basisbaum). Normalerweise können die Gerätebauminformationen nicht ohne Neustart geändert werden. Wenn Sie jedoch den Gerätebaum ** Overlay ** verwenden, kann der Inhalt des Basisbaums geändert werden.
Das Lesen und Löschen von Overlay-Dateien ändert den Inhalt des Gerätebaums, und der Inhalt des Gerätebaums an diesem Punkt wird als Live-Baum bezeichnet. Wenn die Gerätebaumüberlagerung nicht ausgeführt wird, ist der Livebaum = Basisbaum.
Die Gerätebaum-Overlay-Datei hat auch eine Textquelle und eine Binärdatei und wird wie der Gerätebaum mit dtc kompiliert. Um es von der Gerätebaumdatei zu unterscheiden, lautet die Erweiterung der Overlay-Quelle .dtso und die Erweiterung der Overlay-Binärdatei .dtbo.
Die minimal erforderliche Overlay-Datei lautet wie folgt.
minimum.dtso
/dts-v1/;
/plugin/;
/ {
fragment@0 { /*Der Knotenname kann beliebig sein*/
target = <phandle>; /*Phandle des zu überlagernden Knotens*/
/*Oder*/
target-path="/path"; /*Pfad des Knotens zur Überlagerung*/
__overlay__ {
/*Zu überlagernde Eigenschaftsdefinitionen*/
/*Zu überlagernde Knotendefinitionen*/
};
};
};
Alles was Sie brauchen ist einfach
--/ plugin /;
nach / dts-v1 /; am Anfang
--Wurzelknoten
--Kindknoten des Wurzelknotens. Der Name des Knotens kann beliebig sein
__overlay__
Beschreiben Sie den spezifischen Overlay-Inhalt im KnotenEs wird sein. Mit dem / plugin /;
am Anfang können Sie beim Schreiben der Overlay-Datei auf die Bezeichnung verweisen, die im zuvor geladenen Gerätebaum (Live-Baum) definiert ist. Beispielsweise können Sie den im Basisbaum definierten Beschriftungsnamen als Wert für "Ziel" verwenden (auch wenn in dieser Datei in der Überlagerungsdatei keine Beschriftung definiert ist, verursacht dtc keinen Fehler).
Der Basisbaum muss jedoch die Option- @ haben, um beim Kompilieren mit dtc Symbolinformationen in .dtb aufzunehmen (mit - @ für .dtb, erstellt mit Kernel Source im Git-Repository für FPGAs). Ich denke es wurde zusammengestellt).
Die Kernelquelle des vom FPGA-Anbieter verwalteten Git-Repositorys enthält einen Treiber namens ConfigFs, der standardmäßig verfügbar ist (aus den Referenzen 1 und 2). Daher verwenden wir diesen Mechanismus.
Im Folgenden lautet der Pfad von configfs für die Gerätebaumüberlagerung $ OVL_PATH.
X-Serie: OVL_PATH = / configfs / Gerätebaum / Overlays
Serie I: OVL_PATH = / sys / kernel / config / Gerätebaum / Overlays
(Für die X-Serie scheint es notwendig zu sein, mkdir / configfs; mount -t configfs configfs / configfs
im Voraus festzulegen.)
Dies erfolgt in zwei Schritten:
--Erstellen Sie ein Verzeichnis mit einem beliebigen Namen im Verzeichnis $ OVL_PATH.
Das folgende Beispiel zeigt das Erstellen eines Verzeichnisses my_overlay1_dir und das Laden einer Overlay-Datei mit dem Namen my_overlay1.dtbo. (Annahme der Ausführung als Root-Benutzer)
# mkdir $OVL_PATH/my_overlay1_dir
# cat my_overlay1.dtbo > $OVL_PATH/my_overlay1_dir/dtbo
Das Löschen erfolgt in einem Schritt.
Wenn Sie den überlagerten Inhalt im obigen Beispiel löschen möchten,
# rmdir $OVL_PATH/my_overlay1_dir
Zusätzlich zu "dtbo" werden die Dateien "Pfad" und "Status" automatisch in dem für die Überlagerung erstellten Verzeichnis generiert.
path
ist eine Schnittstelle, die Overlay wie dtbo
ausführen kann, aber die Overlay-Datei, die sich unter / lib / firmware / und abc. Under / lib / firmware / befindet, mit dem folgenden Befehl liest. Überlagerung mit dtbo.
# echo "abc.dtbo" > $OVL_PATH/my_overlay1_dir/path
status
ist eine Schnittstelle, über die Sie den Status des Overlay-Verzeichnisses ermitteln können. Mit cat können Sie mithilfe von dtbo oder dem Pfad dieses Verzeichnisses herausfinden, ob Overlay ausgeführt wird.
# cat $OVL_PATH/my_overlay1_dir/status
/*angewendet oder nicht angewendet wird gedruckt*/
[Referenz 1: Lösung der Zynq PL-Programmierung mit FPGA Manager](https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841645/Solution+Zynq+PL+Programming+With+FPGA+Manager# Test + Prozedur-Verwenden + Gerät + Baum + Überlagerung :) Referenz 2: Rockeboards.org HowToCreate a DeviceTree Ich habe Device Tree Overlay mit FPGA + SoC + Linux ausprobiert: @ ikwzms Artikel, ich beziehe mich immer darauf m (--- ) m
Recommended Posts