Используйте графический процессор vivante на IMX6 с ядром 4.14 - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над IMX6QP с yocto rocko / Linux 4.14.24 и пытаюсь использовать графический процессор.

Мой файл конфигурации yocto:

MACHINE ??= 'imx6qp-tx6-emmc'
DL_DIR ?= "${BSPDIR}/downloads"
SSTATE_DIR ?= "${BSPDIR}/sstate-cache"
DISTRO ?= 'karo-minimal'
PACKAGE_CLASSES ?= "package_deb"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
VIRTUAL-RUNTIME_init_manager = "sysvinit"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    STOPTASKS,/tmp,100M,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K \
    ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
CONF_VERSION = "1"
# EXTRA_IMAGE_FEATURES += "read-only-rootfs"

CORE_IMAGE_EXTRA_INSTALL += "openssh \
                 openssh-sftp-server iproute2 dnsmasq iperf3 \
                 v4l-utils curl vim gnutls alsa-utils iw \
                 usbutils pciutils i2c-tools can-utils libsocketcan wpa-supplicant \
                 gstreamer1.0 gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-base \
                 devmem2 iputils modutils-initscripts \
                 iptables iproute2-ss iproute2-tc bridge-utils hostapd \
                 ruby gdb \
                 qtbase-plugins \
                 qtbase-tools \
                 qtdeclarative \
                 qtdeclarative-tools \
                 qtdeclarative-qmlplugins \
                 qtmultimedia \
                 qtmultimedia-plugins \
                 qtmultimedia-qmlplugins \
                 qtsvg \
                 qtsvg-plugins \
                 qtsensors \
                 qtimageformats-plugins \
                 qtsystems \
                 qtsystems-tools \
                 qtsystems-qmlplugins \
                 qtscript \
                 qt3d \
                 qt3d-qmlplugins \
                 qt3d-tools \
                 qtgraphicaleffects-qmlplugins \
                 qtconnectivity-qmlplugins \
                 qtlocation-plugins \
                 qtlocation-qmlplugins \
                 cinematicexperience \
                     fb-test fbgrab fbida fbset-modes \
                 es2gears \
                 "

DISTRO_FEATURES_remove = " x11 wayland "
PACKAGECONFIG_append_pn-qtbase = " gles2 eglfs "
DISTRO_FEATURES_append = " opengles2 egl opengl gles gbm dri eglfs gles2 "

BB_NUMBER_THREADS = "1"
LICENSE_FLAGS_WHITELIST = "commercial"

Когда я запускаю es2gears или Qt5_CinematicExperience, yocto отображает это:

gbm: failed to open any driver (search paths /usr/lib/dri)
gbm: Last dlopen error: /usr/lib/dri/etnaviv_dri.so: cannot open shared object file: No such file or directory
failed to load driver: etnaviv
gbm: failed to open any driver (search paths /usr/lib/dri)
gbm: Last dlopen error: /usr/lib/dri/kms_swrast_dri.so: cannot open shared object file: No such file or directory
failed to load driver: kms_swrast
Unable to create EGL surface (eglError: 12299)

В папке / usr / lib / dri есть только: swrast_dri.so

Как можно использовать графический процессор vivante с этим ядром? Является ли это возможным? Где я могу найти драйвер etnaviv без мета-свободного слоя?

Целью будет запуск приложения Qt5, использующего eglfs.

В файле meta-karo / conf / machine / include / tx-base.inc:

PREFERRED_PROVIDER_virtual/egl ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
PREFERRED_PROVIDER_virtual/libg2d_mx6 ?= "mesa"
PREFERRED_PROVIDER_virtual/libg2d_mx6ul ?= ""

Я добавил: CORE_IMAGE_INSTALL + = "imx-gpu-viv"

в local.conf и на консоли отобразится:

ERROR: Nothing RPROVIDES 'imx-gpu-viv' (but /media/user/tx6qp-qt5-4.14/build/sources/poky/meta/recipes-core/images/core-image-minimal.bb RDEPENDS on or otherwise requires it)
imx-gpu-viv was skipped: PREFERRED_PROVIDER_virtual/libgles2 set to mesa, not imx-gpu-viv
NOTE: Runtime target 'imx-gpu-viv' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['imx-gpu-viv']
NOTE: Target 'core-image-minimal' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['core-image-minimal', 'imx-gpu-viv']
ERROR: Required build target 'core-image-minimal' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image-minimal', 'imx-gpu-viv']

И мое ядро ​​поддерживает CONFIG_DRM_ETNAVIV

Моя доска - доска Каро, купленная на этой странице .

Заранее спасибо, rBeal

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я вижу, вы тоже используете KaRo TX6QP. Мне удалось получить eglfs с запущенным QT5 TX6DL / TX6S / TX6QP.

Для более новых ядер (например, магистрали) вам не нужен устаревший драйвер vivante-gpu. Выбросьте это из своего local.conf! Вам нужен (или нужен) драйвер mesa-etnaviv, разработанный сообществом для вашего ядра и QP-платы.

Требуются только три шага, поскольку meta-karo уже включен mesa для всех досок, которые вы вставили из meta-karo/conf/machine/include/tx-base.inc

1. Включить поддержку QT5-Mesa

В вашем собственном мета-слое создайте файл recipes-qt5/qt5/qtbase_%.bbappend со следующим содержимым:

# mx6q = TX6Q/TX6QP, this is the important part!
PACKAGECONFIG_GL_mx6q = "gbm gles2 kms"  
# mx6dl = TX6DL/TX6S
PACKAGECONFIG_GL_mx6dl = "gbm gles2 kms"
PACKAGECONFIG_GL_mx6sx = "gles2"
PACKAGECONFIG_GL_mx6sl = "${@base_contains('DISTRO_FEATURES', 'x11', ' gl', ' ', d)}"
PACKAGECONFIG_GL_mx6ul = "${@base_contains('DISTRO_FEATURES', 'x11', ' gl', ' ', d)}"
PACKAGECONFIG_GL_mx7 = "gles2"
QT_CONFIG_FLAGS_append_mx6q = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs', ' -eglfs', d)}"
QT_CONFIG_FLAGS_append_mx6dl = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs', ' -eglfs', d)}"
QT_CONFIG_FLAGS_append_mx6sx = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs', ' -eglfs', d)}"
QT_CONFIG_FLAGS_append_mx6sl = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs',  ' -no-opengl -linuxfb -no-eglfs -opengl es2 -no-xcb', d)}"
QT_CONFIG_FLAGS_append_mx6ul = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs',  ' -no-opengl -no-eglfs -linuxfb', d)}"
QT_CONFIG_FLAGS_append_mx7 = "${@base_contains('DISTRO_FEATURES', 'x11', ' -no-eglfs', ' -no-eglfs -linuxfb', d)}"

Этот .bbappend включает необходимые опции QT5 для TX6 {Q, QP, DL, S, UL, ULL}. Теперь QT5 строит свою платформу eglfs с модулем gdm, который необходим для mesa-etnaviv.

2. Включить галлий и этнавив в мезе

Опять же, в вашем собственном слое, создайте файл recipes-graphics/mesa/mesa_17.1.7.bbappend. Но проверьте, является ли 17.1.7 вашей версией мезы! Чтобы проверить свою меза-версию, найдите меза-рецепт в poky/meta/recipes-graphics/mesa/mesa_[...].bb!

В вашем .bbappend вставьте следующее:

# FIXME: mesa should support 'x11-no-tls' option
python () {
    overrides = d.getVar("OVERRIDES", True).split(":")
    if "imxgpu2d" not in overrides:
        return

    x11flag = d.getVarFlag("PACKAGECONFIG", "x11", False)
    d.setVarFlag("PACKAGECONFIG", "x11", x11flag.replace("--enable-glx-tls", "--enable-glx"))
}

# Enable Etnaviv support
PACKAGECONFIG_append = " gallium"
GALLIUMDRIVERS_append = ",etnaviv,imx"

Последние две строки являются наиболее важными: включение gallium и модуля imx-etnaviv.

Теперь вы готовы пойти и испечь свой собственный образ с помощью QT5-Etnaviv-Support!

3. Запустите ваше приложение правильно!

Оба .bbappends не исправляют qt5-qmake, чтобы включить нужную платформу из коробки.

./yourapplication -platform eglfs

Теперь ваше приложение должно сработать и успешно работать с egl. Однако может случиться так, что ваш QT5 хочет использовать другую интеграцию eglfs-device. Вы можете проверить это, запустив

export QT_LOGGING_RULES="qt.qpa.*=true"
./yourapplication -platform eglfs

Когда QT жалуется, что не поддерживает эмулированный egl или жалуется, что не может загрузить eglfs_viv, eglfs_emu или eglfs_ *, попытайтесь принудительно заставить его интегрироваться с устройством (gbm) с помощью

export QT_QPA_EGLFS_INTEGRATION=eglfs_gbm
./yourapplication -platform eglfs
0 голосов
/ 30 октября 2018

Это зависит от вашего провайдера yocto bsp, пожалуйста, отметьте preferred_provider_virtual/libgl/egl ="mesa/imx-gpu-viv".
Я думаю, что в настоящее время только некоторые ёктопии обеспечивают нормальную жизнь. как phytec yocto BSP и т. д., если вы хотите добавить etnaviv_dri.so
1. Сначала проверьте ваш yocto bsp is providig mesa (etnaviv) drm и imx-drm 2. Поддерживает ли ваше ядро ​​драйвер etna viv (drivers/gpu/etna/*).

упомяните свою доску, чтобы узнать больше

...