Qt auf i.MX6 mit -platform eglfs -> Segmentierungsfehler
-
21-12-2019 - |
Frage
Ich habe Qt 5.1.1 für ein i.MX6-basiertes Nitrogen6x-Board mit Debian 7 (wheezy) kreuzkompiliert.
Ich habe Qt mit dem konfiguriert -egl
Parameter und eglfs wurden in der Konfigurationsausgabe als QPA-Backend aufgeführt.
Wenn ich jedoch versuche, eine kleine Beispielanwendung mit dem auszuführen -platform eglfs
Parameter Ich stoße auf diesen Fehler:
stdin: is not a tty
[ 1] HAL user version 4.6.9 build 6622 Aug 15 2013 13:22:40
[ 2] HAL kernel version 4.6.9 build 1210
QML debugging is enabled. Only use this in a safe environment.
bash: line 1: 3673 Segmentation fault DISPLAY=:0.0 /opt/Test/bin/Test -platform eglfs
Remote application finished with exit code 139.
OpenGL ES2 und EGL sind auf der Platine installiert und in zu finden /usr/lib
Und /usr/include
.Leider konnte ich keine geeignete Dokumentation für eglfs finden, daher hoffe ich, dass hier jemand Erfahrungen damit gemacht hat.
Dies ist die Backtrace-Ausgabe:
run Test-platform eglfs
Starting program: /opt/Test/bin/Test Test -platform eglfs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
[ 1] HAL user version 4.6.9 build 6622 Aug 15 2013 13:31:17
[ 2] HAL kernel version 4.6.9 build 1210
QML debugging is enabled. Only use this in a safe environment.
[New Thread 0x2c6b7460 (LWP 4057)]
Program received signal SIGSEGV, Segmentation fault.
0x2bab6f48 in gcoHAL_QueryChipCount () from /usr/lib/libGAL.so
(gdb) backrace full
Undefined command: "backrace". Try "help".
(gdb) backrace full[1@t
#0 0x2bab6f48 in gcoHAL_QueryChipCount () from /usr/lib/libGAL.so
No symbol table info available.
#1 0x2ba7ccbc in veglGetThreadData () from /usr/lib/libEGL.so.1
No symbol table info available.
#2 0x2ba74cd0 in eglBindAPI () from /usr/lib/libEGL.so.1
No symbol table info available.
#3 0x2be41934 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
No symbol table info available.
#4 0x2be41934 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) info registers
r0 0x1 1
r1 0x23e54 147028
r2 0x738 1848
r3 0x0 0
r4 0x2bb67d84 733379972
r5 0x23e18 146968
r6 0x2e70c 190220
r7 0x2b430198 725811608
r8 0x7efff9e8 2130704872
r9 0x8 8
r10 0x2b0725c4 721888708
r11 0x7efffae0 2130705120
r12 0x2bab6f1c 732655388
sp 0x7efff8f0 0x7efff8f0
lr 0x2ba7ccbc 732417212
pc 0x2bab6f48 0x2bab6f48 <gcoHAL_QueryChipCount+44>
cpsr 0x80000010 -2147483632
(gdb) x/16i $pc
=> 0x2bab6f48 <gcoHAL_QueryChipCount+44>: ldr r3, [r3, #12]
0x2bab6f4c <gcoHAL_QueryChipCount+48>: sub r2, r3, #1
0x2bab6f50 <gcoHAL_QueryChipCount+52>: cmp r2, #2
0x2bab6f54 <gcoHAL_QueryChipCount+56>: bhi 0x2bab6f70 <gcoHAL_QueryChipCount+84>
0x2bab6f58 <gcoHAL_QueryChipCount+60>: ldr r2, [r4]
0x2bab6f5c <gcoHAL_QueryChipCount+64>: mov r0, #0
0x2bab6f60 <gcoHAL_QueryChipCount+68>: str r3, [r1]
0x2bab6f64 <gcoHAL_QueryChipCount+72>: add r3, r2, #1
0x2bab6f68 <gcoHAL_QueryChipCount+76>: str r3, [r4]
0x2bab6f6c <gcoHAL_QueryChipCount+80>: pop {r4, pc}
0x2bab6f70 <gcoHAL_QueryChipCount+84>: mvn r0, #8
0x2bab6f74 <gcoHAL_QueryChipCount+88>: bl 0x2baad5fc
0x2bab6f78 <gcoHAL_QueryChipCount+92>: ldr r3, [r4]
0x2bab6f7c <gcoHAL_QueryChipCount+96>: mvn r0, #8
0x2bab6f80 <gcoHAL_QueryChipCount+100>: add r3, r3, #1
0x2bab6f84 <gcoHAL_QueryChipCount+104>: str r3, [r4]
(gdb) thread apply all backtrace
Thread 2 (Thread 0x2c6b7460 (LWP 4057)):
#0 0x2b52ef96 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
#1 0x2b568634 in _IO_file_close () from /lib/arm-linux-gnueabihf/libc.so.6
#2 0x2b568ffe in _IO_file_close_it () from /lib/arm-linux-gnueabihf/libc.so.6
#3 0x2b56113a in fclose () from /lib/arm-linux-gnueabihf/libc.so.6
#4 0x2bea8d00 in udev_new () from /lib/arm-linux-gnueabihf/libudev.so.0
#5 0x2be7d2e4 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
#6 0x2be7d2e4 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Thread 1 (Thread 0x2bcb9220 (LWP 4056)):
#0 0x2bab6f48 in gcoHAL_QueryChipCount () from /usr/lib/libGAL.so
#1 0x2ba7ccbc in veglGetThreadData () from /usr/lib/libEGL.so.1
#2 0x2ba74cd0 in eglBindAPI () from /usr/lib/libEGL.so.1
#3 0x2be41934 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
#4 0x2be41934 in ?? () from /usr/local/Qt-Debian/plugins/platforms/libqeglfs.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) quit
Wie könnte ich diesen Fehler möglicherweise beheben?
Lösung 2
Ich habe dieses Problem behoben, indem ich zu Yocto gewechselt bin und dadurch Zugriff auf die neuesten Versionen wesentlicher Komponenten erhalten habe.Wenn Sie für eine i.MX-CPU entwickeln, empfehle ich dringend, einen Blick darauf zu werfen https://github.com/Freescale/fsl-community-bsp-platform
Es ist sehr wichtig, „x11“ aus den Standarddistrovars und „wayland“ aus poky.conf zu entfernen, da dies zu Fehlern führt.
Der Aufbau von Qt5 auf einem solchen Setup funktioniert einwandfrei.
Andere Tipps
Ich habe genau den gleichen Absturz auf einem MarSBoard, das eine EGL-FB-Anwendung auf einem Yocto-Image ausführt, das mit Rezepten von erstellt wurde https://github.com/silmerusse/meta-robomind.Ich musste die EGL/OpenGL-bezogenen Dinge von kopieren http://repository.timesys.com/buildsources/g/gpu-viv-bin-mx6q/.In meinem Fall ist galcore.ko eingebaut.
Bearbeiten:Überprüfen Sie, ob Sie über /dev/galcore verfügen und die Berechtigung crw.rw.rw lautet.(sonst sudo chmod 666 /dev/galcore).Wenn Sie nicht über /dev/galcore verfügen, versuchen Sie es mit insmod /lib/modules/..../kernel/drivers/mxc/gpu-viv/galcore.ko.Diese Schritte haben den Absturz bei einem Ubuntu-Image behoben.Auf dem Yocto-Image ist der Galcore-Treiber integriert und scheint vorhanden zu sein, aber ich bekomme immer noch den Absturz.
Bearbeiten:Der Absturz im Yocto-Image wurde durch die falsche Version der EGL/GAL.so-Bibliotheken verursacht.Anscheinend hat der im Kernel integrierte Galcore-Treiber die Version 4.6.9.6622.Es erfordert Bibliotheken von gpu-viv-bin-mx6q-3.0.35-4.1.0.Wenn ich diese Bibliotheken verwende und sie manuell nach /usr/lib kopiere, läuft meine fb-Anwendung einwandfrei, mit Hardware-OpenGLES 2.0 und Hardware-Dekodierung eines h264-Videos.
Ich habe einen ähnlichen Segfault erhalten, als ich vergessen habe, das Galcore-Modul zu laden.Hier ist der Backtrace:
#0 0x766062b0 in gcoHAL_QueryChipCount (Hal=Hal@entry=0x0, Count=Count@entry=0x16494)
at gc_hal_user_query.c:1726
#1 0x766da244 in veglGetThreadData () at gc_egl.c:137
#2 0x766d3210 in eglfGetDisplay (display_id=0x16c08) at gc_egl_init.c:464
#3 eglGetDisplay (DisplayID=0x16c08) at gc_egl_init.c:565
Qt 5.3.2, Kernel 3.10.17, Galcore-Version 4.6.9.9754