eglfs на raspberry2 - * не удалось добавить сервис - уже используется?

Это мой первый пост здесь.

Я хотел бы быть кратким...

Следующая проблема:

я хочу запустить приложение qt5/qtquickcontrols2, использующее бэкэнд eglfs на raspberry-pi 2b, ускоренное, конечно, vc4. В идеале он должен работать в режиме киоска, и ему определенно требуется ускоренная функциональность 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?

Я также тестировал тот же самый кросс-компилированный двоичный файл - та же ошибка. Все, кроме последней строки, взяты из подробного отладочного вывода qt5, которое я установил через переменную окружения, подробности будут приведены ниже.

Система / Среда:

  • малина-пи 2б
  • кварты-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

Мой 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

Мой 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

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

Вы можете увидеть несколько специфических настроек 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?

Похоже, это не проблема с видео ядром и не проблема "стандартного" Qt manjaro-arm. Он просто говорит, что что-то может быть заблокировано, но что? Есть намеки?

Оверлеи и драйверы, похоже, работают, glxgears набрал ~60FPS на xfce4. Интересно также следующее:

[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

Выглядит так, как и должно быть для меня.

Я пробовал следующие вещи:

Я поигрался с разделением gpu_mem, пробовал значения между 128 и 448. Проверка gpu mem выглядит как положено, но не влияет на выполнение упомянутого приложения.

[manjaro@Loki gallery]$ vcgencmd get_mem gpu
gpu=320M

Я также создал следующее правило 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

Без упомянутого правила 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

Черт... У меня сейчас нет идей... Буду признателен за каждый маленький намек, который может помочь...

Пожалуйста, не надо:

  • anser, чтобы прочитать несколько документов (я уже потратил кучу времени)
  • предлагаем попробовать другой дистрибутив (это НЕ решение)
  • Предлагаю перепрошить мою SDCard (НЕ решение тоже)

Кто получил Qt-5.7/qtquickcontrols2/QML, работающий над raspberrypi 2 через EGLFS с использованием vc4??? Большое спасибо за каждую крошку...

2 ответа

Я столкнулся с той же проблемой.

Бывает, что когда вы используете драйвер 'vc4-kms-v3d' с открытым исходным кодом (как установлено в вашем config.txt), вы не можете использовать драйверы с закрытым исходным кодом (/opt/vc/lib/libGLESv2.so и /opt/vc/lib/libEGL.so в строке LD_PRELOAD).

Ошибка

failed to add service - already in use?

Указывает на это, как я только что узнал.

Итак, вы можете либо прокомментировать строку в config.txt, либо не использовать стратегию LD_PRELOAD или QT_QPA_EGLFS_INTEGRATION=eglfs_brcm

не используйте fakg в своем комментарии config.txt

      # dtoverlay=vc4-kms-v3d
Другие вопросы по тегам