Exécutez le pilote Lima sur Debian GNU / Linux pour Ultra96 / Ultra96-V2

introduction

À partir du noyau Linux 5.2, le pilote Lima a été ajouté à la ligne principale. Lima Driver est un pilote de noyau open source pour Mali-400/450. Cet article montre comment exécuter le pilote Lima sur linux-xlnx v2020.1 (basé sur Linux Kernel 5.4).

Pour le moment, nous avons seulement confirmé expérimentalement que le Lima Driver a démarré. Notez que nous n'avons même pas exécuté la bibliothèque graphique Mesa qui s'exécute dessus.

Qu'est-ce que Lima

Lima est un pilote graphique open source pour le Mali-400/450. Lima inclut le pilote Lima, un pilote du noyau Linux, et Mesa Lima, un pilote pour la bibliothèque graphique Mesa.

Fig.1 Lima

Fig.1 Lima


Pour plus d'informations sur Lima, veuillez consulter l'URL suivante.

C'est déroutant, mais il y a aussi un pilote malien en dehors du pilote Lima. Mali Driver est un pilote de noyau GPU Mali Ulgard open source fourni par ARM. Pour utiliser le pilote Mali, vous devez visiter la page Web ARM et accepter la licence de l'utilisateur final. Veuillez vous référer à l'article suivant pour savoir comment incorporer le pilote Mali dans Ultra96 / Ultra96-V2.

Pilote Lima build

Intégré dans le noyau

À partir du noyau Linux 5.2, le pilote Lima est inclus dans la ligne principale. Le code source des pilotes se trouve dans drivers / gpu / drm / lima.

Puisque linux-xlnx v2020.1 est basé sur le noyau Linux 5.4, le pilote Lima a été ajouté. Cependant, le fichier de configuration du noyau (xilinx_zynqmp_defconfig) fourni pour Ultra96 / Ultra96-V2 n'inclut pas le pilote Lima. Ajoutez CONFIG_DRM_LIMA = y ou CONFIG_DRM_LIMA = m à arch / arm64 / configs / xylinx_zynqmp_defconfig ou sélectionnez Device Drivers> Graphics support> LIMA (DRM support for ARM Mali 400/450 GPU) dans make menuconfig.

Paramètres de l'arborescence des périphériques

L'arborescence des périphériques pour zynqmp dans linux-xlnx v2020.1 a la description suivante:

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


	:
	(Omission)
	:
	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>;
	};
	:
	(Omission)

En outre, l'arborescence des périphériques pour Ultra96 a la description suivante.

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


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

À partir de là, le GPU doit être activé dans Ultra96. Cependant, le pilote Lima ne fonctionnera pas tel quel. En fait, l'arborescence des périphériques présentée ci-dessus est pour le pilote Mali, pas pour le pilote Lima.

Pour que l'arborescence des périphériques soit compatible avec le pilote Lima, vous devez modifier les valeurs des propriétés des noms d'interruption et des noms d'horloge du nœud gpu.

propriété interrupt-names

Mali Driver et Lima Driver ont des noms d'interruption différents. Le pilote Lima crée la propriété d'interruption-names comme suit:

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";
;

propriété clock-names

L'horloge supposée est différente entre Mali Driver et Lima Driver. Le pilote Mali envisage trois horloges, "gpu", "gpu_pp0" et "gpu_pp1", mais Lima envisage deux horloges, "bus" et "core".

Non seulement ils ont des noms différents, mais ils supposent également différents types d'horloges, donc le simple fait de renommer les horloges ne fonctionne pas "normalement". Des modifications sont nécessaires au niveau du code source "normalement" du pilote Lima.

Cependant, ZynqMP est un peu délicat, mais vous pouvez le faire fonctionner en modifiant simplement l'arborescence des périphériques. Plus précisément, remplacez "gpu_pp0" par "core" et "gpu_pp1" par "bus" comme suit.

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


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

Le Lima Driver active d'abord une horloge avec le nom "bus". Cependant, dans cette arborescence de périphériques, l'horloge de "gpu_pp1" est effectivement activée. Activez ensuite l'horloge avec le nom "core". Cependant, en effet, l'horloge de "gpu_pp0" est activée.

Alors qu'en est-il de l'horloge "gpu"? Il y a une question, mais il n'y a pas de problème avec ZynqMP. Parce que dans ZynqMP, "gpu_pp0", "gpu_pp1", "gpu" ont une structure hiérarchique, et la sortie d'horloge "gpu" est "gpu" -> "gpu_pp0", "gpu" -> "gpu_pp1". Il est connecté à l'entrée d'horloge "gpu_pp0" et à l'entrée d'horloge "gpu_pp1". Le pilote d'horloge du noyau Linux active une horloge rétroactivement lorsqu'il est activé. Par conséquent, lorsque l'horloge "gpu_pp0" est activée, l'horloge "gpu" est également activée.

Lancez Lima Driver

Lorsque vous démarrez le noyau Linux avec le pilote Lima installé, le journal suivant apparaîtra sur la console (ou dmesg).

shell$ dmesg
	:
	(Omission)
	:
[    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
	:
	(Omission)

Vous pouvez également créer renderD128 sous / dev / dri.

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

Problèmes avec le pilote Lima

J'ai essayé d'exécuter linux-xlnx v2020.1 avec le pilote Lima, mais pour le moment, j'ai deux problèmes.

Ne peut pas coexister avec zocl

zocl est un module noyau de XRT (Xilinx Runtime). Consultez les articles suivants pour zocl et XRT.

Si vous installez zocl avec le pilote Lima installé, le fichier de périphérique pour zocl sera / dev / dri / renderD129 (renderD128 est déjà utilisé par le pilote lima). Dans cet état, par exemple, lorsque j'essaye de démarrer le programme exemple de [ZynqMP-XRT-Example-1-Ultra96], il est dit que le périphérique ne peut pas être trouvé comme suit.

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

Apparemment, cela ne fonctionne que si / dev / dri / renderD128 est assigné à zocl. J'ai essayé de modifier le pilote lima, puis de charger zocl et d'assigner / dev / dri / renderD128 à zocl et cela a bien fonctionné.

Le redémarrage échoue

Lorsque j'essaye de modifier le pilote Lima, puis de le redémarrer avec modprobe, le redémarrage échoue avec le journal suivant.

shell$ dmesg
	:
	(Omission)
	:
[ 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

Cette affaire est actuellement en suspens.

finalement

L'auteur fournit Debian GNU / Linux pour Ultra96 / Ultra96-V2 (ZynqMP) [1]. Cependant, pour le moment, le pilote Lima n'est pas installé en raison des problèmes mentionnés dans la section précédente. Nous prévoyons d'intégrer Lima dès que ces problèmes seront résolus. Nous recherchons de bonnes idées.

référence

["Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Présentation)" @Qiita]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Pour Ultra96 / Ultra96-V2 Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux (présentation) «@Qiita» ["Exécution de X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (pilote Mali)" @Qiita]: https://qiita.com/ikwzm/items/8c96d75e03cdcb91e5b2 "" Debian GNU pour Ultra96 / Ultra96-V2 / Exécuter X Window sous Linux (pilote Mali) "@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 "Fourniture d'une image de démarrage pour Debian GNU / Linux (version v2019.1) pour UltraZed / Ultra96 / Ultra96-V2" @Qiita "

Recommended Posts

Exécutez le pilote Lima sur Debian GNU / Linux pour Ultra96 / Ultra96-V2
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (pilote vidéo)
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (pilote Mali)
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (LibMali)
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Gnome Desktop)
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Installation)
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Build)
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Build) [Unfinished]
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Installation) [Inachevé]
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (édition Vitis)
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (édition fbdev)
Exécuter X Window sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (présentation)
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Présentation)
Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (pratique)
Exécutez bootgen sur Debian GNU / Linux, Ubuntu
Image de démarrage Debian GNU / Linux (version v2019.2) pour UltraZed / Ultra96 / Ultra96-V2
Exécutez Debian (Linux) et LXQt sur Athlon 200GE (AMD)
Linux sur Windows -1-: Présentation de Debian
Exécutez un serveur Linux avec GCP
Exécutez le client VMware Horizon sur Debian
[Note] Exécutez Django sur Amazon Linux 2
pykintone sur le sous-système Windows pour Linux
Exécutez cron sur Amazon Linux (défini sur Linux)
Pilote de périphérique (compatible NumPy) pour les programmes et le matériel qui s'exécutent dans l'espace utilisateur sous Linux pour partager la mémoire
Exécutez Linux avec l'architecture ARM à l'aide de QEMU