À 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.
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
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.
À 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.
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.
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";
;
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.
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
J'ai essayé d'exécuter linux-xlnx v2020.1 avec le pilote Lima, mais pour le moment, j'ai deux problèmes.
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é.
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.
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.
["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