raspberry2上的eglfs - *无法添加服务 - 已经在使用?

Arm*_*ssa 6 qt5 archlinux-arm raspberry-pi2 qtquickcontrols2 eglfs

这是我在这里的第一篇文章.

我想保持简短......

以下问题:

我想运行一个qt5/qtquickcontrols2应用程序,利用覆盆子-pi 2b上的eglfs后端,当然是由vc4加速.理想情况下,它应该在kiosk模式下运行,它肯定需要加速gl功能.为了尽量减少问题,我使用命令测试:

LD_PRELOAD="/opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so" qmlscene ./gallery.qml

其中gallery.qml只是qt-creator的小部件预览示例项目(遵循这些说明......).我得到以下错误输出:

[manjaro@Loki gallery]$ LD_PRELOAD="/opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so" qmlscene ./gallery.qml
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_brcm", "eglfs_kms", "eglfs_x11")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_brcm", "eglfs_kms", "eglfs_x11")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_brcm"
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_brcm"
* failed to add service - already in use?
Run Code Online (Sandbox Code Playgroud)

我也测试了同样运行交叉编译的二进制文件 - 同样的错误.除最后一行之外的所有行都来自qt5的详细调试输出,我通过环境变量设置,详细信息将随之而来.

系统/环境:

  • raspberry-pi 2b
  • QT-5.7.0
  • Manjaro-ARM(基于Arch Linux ARM)
  • 所有固件东西,工具,启动内容,内核都已安装并且是最新的

其他设置......

[manjaro@Loki gallery]$ uname -a
Linux Loki 4.4.28-1-MANJARO-ARM #1 SMP Sat Oct 29 21:01:09 CDT 2016 armv7l GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我的config.txt

dtparam=audio=on
#hdmi_drive=2
avoid_warnings=2
disable_overscan=1
disable_splash=1
boot_delay=0

# activate raspi cam
start_x=1

# tuning gpu accel and memory usage
gpu_mem=320
dtoverlay=vc4-kms-v3d
Run Code Online (Sandbox Code Playgroud)

我的cmdline.txt

root=/dev/mmcblk0p2 rw  rootwait console=tty1 selinux=0 quiet plymouth.ignore-serial-consoles dwc_otg.lpm_enable=0 elevator=deadline fsck.repair=yes
Run Code Online (Sandbox Code Playgroud)

printenv给出以下内容:

XDG_SESSION_ID=c1
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.0.100 43274 22
QT_QPA_EGLFS_INTEGRATION=eglfs_brcm
OLDPWD=/home/manjaro
SSH_TTY=/dev/pts/0
USER=manjaro
MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins
MAIL=/var/spool/mail/manjaro
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/vc/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
PWD=/home/manjaro/opt
LANG=de_DE.UTF-8
QT_QPA_PLATFORM=eglfs
SHLVL=1
HOME=/home/manjaro
LOGNAME=manjaro
QT_LOGGING_RULES=qt.qpa.*=true
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_CONNECTION=192.168.0.100 43274 192.168.0.107 22
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/printenv
Run Code Online (Sandbox Code Playgroud)

你可以看到几个Qt特定的设置:调试,使用eglfs作为默认后端和最有趣的: QT_QPA_EGLFS_INTEGRATION=eglfs_brcm这意味着应该使用broadcom eglfs插件.沿着eglfs_brcm我也试过eglfs_kms(只是出于好奇):

[manjaro@Loki gallery]$ export QT_QPA_EGLFS_INTEGRATION=eglfs_kms
[manjaro@Loki gallery]$ LD_PRELOAD="/opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so" qmlscene ./gallery.qml 
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_brcm", "eglfs_kms", "eglfs_x11")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_kms", "eglfs_brcm", "eglfs_x11")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_kms"
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_kms"
qt.qpa.input: udev device discovery for type QFlags(0x10)
qt.qpa.input: Found matching devices ("/dev/dri/card0")
qt.qpa.eglfs.kms: Found the following video devices: ("/dev/dri/card0")
qt.qpa.eglfs.kms: Using "/dev/dri/card0"
qt.qpa.eglfs.kms: Opening device "/dev/dri/card0"
qt.qpa.eglfs.kms: Creating GBM device for file descriptor 5 obtained from "/dev/dri/card0"
* failed to add service - already in use?
Run Code Online (Sandbox Code Playgroud)

它似乎既不是视频核心的问题,也不是manjaro-arm的"库存"Qt的问题.它只是说某些东西可能被封锁,但是什么?任何提示?

覆盖和驱动程序似乎工作,glxgears在xfce4上运行~60FPS.以下是有趣的:

[root@Loki gallery]# vcdbg log msg|& grep -v gpioman|grep -iv hdmi
001042.905: *** Restart logging
001043.889: Read command line from file 'cmdline.txt'
root=/dev/mmcblk0p2 rw  rootwait console=tty1 selinux=0 nofb dwc_otg.lpm_enable=0 elevator=deadline fsck.repair=yes
001409.425: Loading 'kernel7.img' to 0x8000 size 0x5ea25c
001413.076: Kernel trailer DTOK property says yes
001413.091: Kernel trailer DDTK property says yes
001415.514: Loading 'bcm2709-rpi-2-b.dtb' to 0x5f225c size 0x3bfc
001514.479: dtparam: audio=on
001567.591: Loaded overlay 'vc4-kms-v3d'
001836.841: Device tree loaded to 0x2effbc00 (size 0x430d)
005904.220: vchiq_core: vchiq_init_state: slot_zero = 0xd0400000, is_master = 1
005911.919: TV service:host side not connected, dropping notification 0x00000002, 0x00000001, 0x00000010
007999.619: camsubs: Looking for camera 0: i2c_port = 0, led gpio = 32, power enable gpio = 41
008000.339: camsubs: Camera not found
008000.377: camsubs: Looking for camera 0: i2c_port = 0, led gpio = 32, power enable gpio = 41
008001.091: camsubs: Camera not found
008001.128: camsubs: Looking for camera 0: i2c_port = 0, led gpio = 32, power enable gpio = 41
008001.844: camsubs: Camera not found
Run Code Online (Sandbox Code Playgroud)

看起来非常像它应该给我.

我试过以下事情:

我玩了gpu_mem split,尝试了128到448之间的值.检查gpu mem看起来像预期的那样,但对执行提到的app没有影响.

[manjaro@Loki gallery]$ vcgencmd get_mem gpu
gpu=320M
Run Code Online (Sandbox Code Playgroud)

我还创建了以下udev规则,以修复我最初遇到的错误

[manjaro@Loki gallery]$ cat /etc/udev/rules.d/10-vchiq-permissions.rules 
SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"

[manjaro@Loki gallery]$ groups
wheel video storage power users
Run Code Online (Sandbox Code Playgroud)

没有提到的udev规则,我会得到以下错误:

[manjaro@Loki gallery]$ LD_PRELOAD="/opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so" qmlscene ./gallery.qml 
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_brcm", "eglfs_kms", "eglfs_x11")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_brcm", "eglfs_kms", "eglfs_x11")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_brcm"
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_brcm"
* failed to open vchiq instance
Run Code Online (Sandbox Code Playgroud)

该死的......我现在已经没有想法......我会感激每一个可能有帮助的小提示......

请不要:

  • anser阅读几个文档(我已经花了很多时间)
  • 建议尝试另一个发行版(这不是解决方案)
  • 建议重新刷新我的SD卡(也不是解决方案)

谁有Qt-5.7/qtquickcontrols2/QML使用vc4通过EGLFS在raspberrypi 2上工作?非常感谢每一个面包屑......

zer*_*tyz 1

我刚刚遇到了同样的问题。

当您使用开源“ vc4-kms-v3d ”驱动程序(在 config.txt 中设置)时,您无法使用闭源驱动程序(/opt/vc/lib/libGLESv2.so/opt/vc/ lib/libEGL.so,在您的 LD_PRELOAD 字符串上)。

错误

failed to add service - already in use?
Run Code Online (Sandbox Code Playgroud)

表明这一点,正如我刚刚发现的那样。

因此,您可以在 config.txt 上注释该行,或者不使用 LD_PRELOAD 策略或 QT_QPA_EGLFS_INTEGRATION=eglfs_brcm