Führen Sie den Lima-Treiber unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus

Einführung

Ab Linux Kernel 5.2 wurde der Lima-Treiber zur Hauptzeile hinzugefügt. Lima Driver ist ein Open Source Kerneltreiber für Mali-400/450. Dieser Artikel zeigt, wie der Lima-Treiber unter linux-xlnx v2020.1 (basierend auf Linux Kernel 5.4) ausgeführt wird.

Im Moment haben wir nur experimentell bestätigt, dass der Lima-Treiber gestartet wurde. Beachten Sie, dass wir nicht einmal die darauf ausgeführte Mesa-Grafikbibliothek ausgeführt haben.

Was ist Lima?

Lima ist ein Open-Source-Grafiktreiber für den Mali-400/450. Lima enthält den Lima-Treiber, einen Linux-Kerneltreiber, und Mesa Lima, einen Treiber für die Mesa-Grafikbibliothek.

Fig.1 Lima

Fig.1 Lima


Weitere Informationen zu Lima finden Sie unter der folgenden URL.

Es ist verwirrend, aber neben dem Lima-Fahrer gibt es auch einen Mali-Fahrer. Mali Driver ist ein Open Source Mali Ulgard GPU Kernel Driver, der von ARM bereitgestellt wird. Um den Mali-Treiber verwenden zu können, müssen Sie die ARM-Webseite besuchen und die Endbenutzerlizenz akzeptieren. Weitere Informationen zum Einbau des Mali-Treibers in Ultra96 / Ultra96-V2 finden Sie im folgenden Artikel.

Lima Treiber bauen

Eingebettet in den Kernel

Ab Linux Kernel 5.2 ist der Lima-Treiber in der Hauptzeile enthalten. Der Quellcode für die Treiber befindet sich in drivers / gpu / drm / lima.

Da linux-xlnx v2020.1 auf Linux Kernel 5.4 basiert, wurde der Lima-Treiber hinzugefügt. Die für Ultra96 / Ultra96-V2 bereitgestellte Kernel-Konfigurationsdatei (xilinx_zynqmp_defconfig) enthält jedoch nicht den Lima-Treiber. Fügen Sie CONFIG_DRM_LIMA = y oder CONFIG_DRM_LIMA = m zu arch / arm64 / configs / xylinx_zynqmp_defconfig hinzu oder wählen Sie Gerätetreiber> Grafikunterstützung> LIMA (DRM-Unterstützung für ARM Mali 400/450 GPU) in make menuconfig.

Gerätebaumeinstellungen

Der Gerätebaum für zynqmp in linux-xlnx v2020.1 enthält die folgende Beschreibung:

arch/arm64/boot/dts/xilinx/zynqmp.dtsi


	:
	(Unterlassung)
	:
	gpu: gpu@fd4b0000 {
		status = "disabled";
		compatible = "arm,mali-400", "arm,mali-utgard";
		reg = <0x0 0xfd4b0000 0x0 0x10000>;
		interrupt-parent = <&gic>;
		interrupts = <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>;
		interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1";
		clock-names = "gpu", "gpu_pp0", "gpu_pp1";
		power-domains = <&zynqmp_firmware PD_GPU>;
	};
	:
	(Unterlassung)

Darüber hinaus enthält der Gerätebaum für Ultra96 die folgende Beschreibung.

arch/arm64/boot/dts/xilinx/zynqmp-zcu100-revC.dts


/dts-v1/;
#include "zynqmp.dtsi"
	:
	(Unterlassung)
	:
&gpu {
	status = "okay";
};
	:
	(Unterlassung)

Aus diesem Grund sollte die GPU in Ultra96 aktiviert sein. Der Lima-Treiber funktioniert jedoch nicht so wie er ist. Tatsächlich ist der oben eingeführte Gerätebaum für den Mali-Treiber und nicht für den Lima-Treiber.

Damit der Gerätebaum mit dem Lima-Treiber kompatibel ist, müssen Sie die Werte der Eigenschaften Interrupt-Namen und Clock-Namen des GPU-Knotens ändern.

Interrupt-Names-Eigenschaft

Mali Driver und Lima Driver haben unterschiedliche Interrupt-Namen. Der Lima-Treiber macht die Interrupt-Namenseigenschaft wie folgt:

arch/arm64/boot/dts/xilinx/zynqmp.dtsi


		interrupts = <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>, <0 132 4>;
		interrupt-names = "gp", "gpmmu", "pp0", "ppmmu0", "pp1", "ppmmu1";
;

Uhrennamen-Eigenschaft

Die angenommene Uhr unterscheidet sich zwischen Mali Driver und Lima Driver. Der Mali-Treiber nimmt drei Uhren an, "gpu", "gpu_pp0" und "gpu_pp1", aber Lima nimmt zwei Uhren an, "bus" und "core".

Sie haben nicht nur unterschiedliche Namen, sondern nehmen auch unterschiedliche Uhrentypen an, sodass das einfache Umbenennen der Uhren nicht "normal" funktioniert. Änderungen sind auf der "normalen" Ebene des Lima Driver-Quellcodes erforderlich.

ZynqMP ist zwar etwas knifflig, aber Sie können es zum Laufen bringen, indem Sie einfach den Gerätebaum ändern. Ändern Sie insbesondere "gpu_pp0" in "core" und "gpu_pp1" in "bus" wie folgt.

arch/arm64/boot/dts/xilinx/zynqmp.dtsi


		clock-names = "gpu", "core", "bus";

Der Lima-Treiber aktiviert zunächst eine Uhr mit dem Namen "Bus". In diesem Gerätebaum ist die Uhr von "gpu_pp1" jedoch effektiv aktiviert. Aktivieren Sie dann die Uhr mit dem Namen "core". Tatsächlich ist jedoch die Uhr von "gpu_pp0" aktiviert.

Was ist also mit der "GPU" -Uhr? Es gibt eine Frage, aber es gibt kein Problem mit ZynqMP. Weil in ZynqMP "gpu_pp0", "gpu_pp1", "gpu" eine hierarchische Struktur haben und die Taktausgabe "gpu" "gpu" -> "gpu_pp0", "gpu" -> "gpu_pp1" ist. Es ist mit dem Takteingang "gpu_pp0" und dem Takteingang "gpu_pp1" verbunden. Der Linux-Kernel-Uhrentreiber aktiviert eine Uhr rückwirkend, wenn sie aktiviert ist. Wenn daher die Uhr "gpu_pp0" aktiviert ist, ist auch die Uhr "gpu" aktiviert.

Starten Sie den Lima-Treiber

Wenn Sie den Linux-Kernel mit installiertem Lima-Treiber starten, wird das folgende Protokoll auf der Konsole (oder dmesg) angezeigt.

shell$ dmesg
	:
	(Unterlassung)
	:
[    7.269921] lima fd4b0000.gpu: IRQ pmu not found
[    7.274750] lima fd4b0000.gpu: IRQ ppmmu2 not found
[    7.279683] lima fd4b0000.gpu: IRQ ppmmu3 not found
[    7.284718] lima fd4b0000.gpu: gp - mali400 version major 1 minor 1
[    7.291112] lima fd4b0000.gpu: pp0 - mali400 version major 1 minor 1
[    7.297575] lima fd4b0000.gpu: pp1 - mali400 version major 1 minor 1
[    7.304059] lima fd4b0000.gpu: IRQ pp2 not found
[    7.308708] lima fd4b0000.gpu: IRQ pp3 not found
[    7.313368] lima fd4b0000.gpu: l2 cache 64K, 4-way, 64byte cache line, 128bit external bus
[    7.330325] lima fd4b0000.gpu: bus rate = 499999995
[    7.335463] lima fd4b0000.gpu: mod rate = 499999995
[    7.360178] [drm] Initialized lima 1.0.0 20190217 for fd4b0000.gpu on minor 1
	:
	(Unterlassung)

Sie können renderD128 auch unter / dev / dri erstellen.

shell$ ls -la /dev/dri
total 0
drwxr-xr-x  3 root root        120 Feb 14  2019 .
drwxr-xr-x 14 root root      13820 Feb 14  2019 ..
drwxr-xr-x  2 root root        100 Feb 14  2019 by-path
crw-rw----  1 root video  226,   0 Feb 14  2019 card0
crw-rw----  1 root video  226,   1 Feb 14  2019 card1
crw-rw----  1 root render 226, 128 Feb 14  2019 renderD128

Probleme mit dem Lima-Treiber

Ich habe versucht, linux-xlnx v2020.1 mit dem Lima-Treiber auszuführen, aber im Moment habe ich zwei Probleme.

Kann nicht mit zocl koexistieren

zocl ist ein Kernelmodul von XRT (Xilinx Runtime). In den folgenden Artikeln finden Sie Informationen zu Zocl und XRT.

Wenn Sie zocl mit installiertem Lima-Treiber installieren, lautet die Gerätedatei für zocl / dev / dri / renderD129 (renderD128 wird bereits vom lima-Treiber verwendet). In diesem Zustand heißt es beispielsweise, wenn ich versuche, das Beispielprogramm von [ZynqMP-XRT-Beispiel-1-Ultra96] zu starten, dass das Gerät nicht wie folgt gefunden werden kann.

shell$ ./streaming_lap_filter5.exe streaming_lap_filter5.xclbin
Using FPGA binary file specfied through the command line: streaming_lap_filter5.xclbin
XRT build version: 2.6.0
Build hash: 7104cc336e010e3e0755264ff832d811ff605e2c
Build date: 2020-03-24 21:07:36
Git branch: 2019.2_Ultra96
PID: 610
UID: 1000
[Tue Jun 23 10:12:10 2020]
HOST: debian-fpga
EXE: /home/fpga/examples/ZynqMP-FPGA-XRT-Example-1-Ultra96/streaming_lap_filter5.exe
[XRT] ERROR: No devices found
../src/krnl_streaming_lap_host3.cpp:71 Error calling err = cl::Platform::get(&platforms), error code is: -1

Anscheinend funktioniert es nur, wenn / dev / dri / renderD128 zocl zugewiesen ist. Ich habe versucht, den Lima-Treiber zu modifizieren, dann zocl zu laden und zocl / dev / dri / renderD128 zuzuweisen, und es hat gut funktioniert.

Neustart schlägt fehl

Wenn ich den Lima-Treiber modifiziere und dann versuche, ihn mit modprobe neu zu starten, schlägt der Neustart mit dem folgenden Protokoll fehl.

shell$ dmesg
	:
	(Unterlassung)
	:
[ 1758.651570] lima fd4b0000.gpu: IRQ pmu not found
[ 1758.656223] lima fd4b0000.gpu: mmu gpmmu dte write test fail
[ 1758.662084] lima: probe of fd4b0000.gpu failed with error -5

Diese Angelegenheit ist derzeit anhängig.

Schließlich

Der Autor stellt Debian GNU / Linux für Ultra96 / Ultra96-V2 (ZynqMP) zur Verfügung [1]. Derzeit ist der Lima-Treiber jedoch aufgrund der im vorherigen Abschnitt genannten Probleme nicht installiert. Wir planen, Lima einzubeziehen, sobald diese Probleme behoben sind. Wir suchen gute Ideen.

Referenz

["Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Übersicht)" @Qiita]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Für Ultra96 / Ultra96-V2 Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux (Übersicht) ”@Qiita” ["Ausführen von X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Mali-Treiber)" @Qiita]: https://qiita.com/ikwzm/items/8c96d75e03cdcb91e5b2 "" Debian GNU für Ultra96 / Ultra96-V2 / X Window unter Linux ausführen (Mali-Treiber) "@Qiita" [ZynqMP-XRT-Example-1-Ultra96]: https://github.com/ikwzm/ZynqMP-XRT-Example-1-Ultra96 "ZynqMP-XRT-Example-1-Ultra96" [1]: https://qiita.com/ikwzm/items/0c6f110aa19e368af03d "Bereitstellung eines Boot-Images für Debian GNU / Linux (Version v2019.1) für UltraZed / Ultra96 / Ultra96-V2" @Qiita "

Recommended Posts

Führen Sie den Lima-Treiber unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Videotreiber) aus.
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Mali-Treiber) aus.
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (LibMali) aus.
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Gnome Desktop) aus.
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus (Installation)
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Build) aus.
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Build) aus [Unfinished]
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus (Installation) [Unfinished]
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Vitis Edition) aus.
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (fbdev Edition) aus.
Führen Sie X Window unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus (Übersicht)
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus (Übersicht).
Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 aus (Übung)
Führen Sie bootgen unter Debian GNU / Linux, Ubuntu aus
Debian GNU / Linux (Version v2019.2) Boot-Image für UltraZed / Ultra96 / Ultra96-V2
Führen Sie Debian (Linux) & LXQt auf Athlon 200GE (AMD) aus.
Linux unter Windows -1-: Einführung in Debian
Führen Sie einen Linux-Server mit GCP aus
Führen Sie den VMware Horizon Client unter Debian aus
[Hinweis] Führen Sie Django unter Amazon Linux 2 aus
pykintone unter Windows Subsystem für Linux
Führen Sie cron unter Amazon Linux aus (unter Linux eingestellt).
Gerätetreiber (NumPy-kompatibel) für Programme und Hardware, die unter Linux im Benutzerbereich ausgeführt werden, um Speicher gemeinsam zu nutzen
Führen Sie Linux mit ARM-Architektur mit QEMU aus