【问题标题】:Use vivante GPU on IMX6 with 4.14 kernel在 4.14 内核的 IMX6 上使用 vivante GPU
【发布时间】:2019-04-02 04:03:27
【问题描述】:

我正在使用 yocto rocko / Linux 4.14.24 开发 IMX6QP,我正在尝试使用 GPU。

我的 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 GPU?可能吗? 在哪里可以找到不包含元飞思卡尔层的 etnaviv 驱动程序?

目标是运行一个使用 eglfs 的 Qt5 应用程序。

在文件 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

我的板子是在this page 购买的 Karo 板子。

提前致谢, rBeal

【问题讨论】:

    标签: kernel gpu imx6


    【解决方案1】:

    这取决于您的 yocto bsp 提供商,请查看preferred_provider_virtual/libgl/egl ="mesa/imx-gpu-viv"
    我认为目前只有一些 yocto bsps 提供 etna viv dri。像 phytec yocto BSP 等,如果你想添加 etnaviv_dri.so
    1.首先检查你的 yocto bsp 是 providig mesa(etnaviv) drm 和 imx-drm 2.你的内核是否支持etna viv driver(drivers/gpu/etna/*).

    提及您的董事会以了解更多信息

    【讨论】:

      【解决方案2】:

      我看到你也在使用 KaRo TX6QP。我已经设法让运行 QT5 的 eglfs TX6DL/TX6S/TX6QP。

      对于较新的内核(例如主线),您不希望使用已弃用的 vivante-gpu-driver。把它扔出你的local.conf!您想要(或需要)为您的内核和 QP-Board 开发社区开发的 mesa-etnaviv 驱动程序。

      只需要三个步骤,因为meta-karo 已经为您从meta-karo/conf/machine/include/tx-base.inc 粘贴的所有板启用了mesa

      1。启用 QT5-Mesa-Support

      在您自己的元层中创建文件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 为 TX6{Q,QP,DL,S,UL,ULL} 启用必要的 QT5 选项。 现在 QT5 使用 gdm 模块构建其 eglfs 平台,这是 mesa-etnaviv 所需的。

      2。在台面启用镓和 etnaviv

      同样,在您自己的层中,创建文件recipes-graphics/mesa/mesa_17.1.7.bbappend但请检查 17.1.7 是否也是您的 mesa 版本! 要检查您的 mesa-version,请在 poky/meta/recipes-graphics/mesa/mesa_[...].bb 中搜索 mesa-recipe!

      在您的 .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-deviceintegration。你可以通过运行来检查

      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
      

      【讨论】:

      • QtCinematicsExperience -platform eglfs 有效,但 es2gears 无效,但我认为这不是问题。谢谢!
      • @rBeal 对于 es2gears,您需要 etnaviv_dri.so 构建。在我的实验中,我得到了 .so 版本。可悲的是,我不再知道我为此做了什么。但是,我的目标是使用 etnaviv 的 QT5-eglfs,这在我们的 S 和 QP 上完美运行。
      • etnaviv_dri.so 是在 mesa 中激活镓和 etnaviv 时构建的。我的目标也是 Qt5
      猜你喜欢
      • 2020-03-22
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多