首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Beaglebone Black上正确地使用eglfs?

如何在Beaglebone Black上正确地使用eglfs?
EN

Stack Overflow用户
提问于 2022-01-05 10:07:45
回答 1查看 592关注 0票数 1

项目描述

我正在使用Yocto为Beaglebone构建嵌入式Linux。嵌入式Linux将用于托管我的Qt5图形应用程序。

嵌入式Linux映像是为在MACHINE中定义的poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf构建的,而不是为存储库meta-ti中的一个构建的(这个映像给了我问题)。

在我正在构建的嵌入式Linux映像中,我已经成功地添加了(a)我的应用程序需要用Qt5编译的bitbake库,(b)我的Qt5应用程序,它成功地用bitbake编译。

Qt5库被追加到图像中,如下所示:

代码语言:javascript
复制
IMAGE_INSTALL += "qtbase qwt-qt5"

我的Qt应用程序被追加如下:

代码语言:javascript
复制
IMAGE_INSTALL += "application"

因此,库是通过菜谱qtbaseqwt-qt5安装的,而我的应用程序是通过我自己编写的菜谱application安装的。

我可以在目标的根文件系统上发布每个菜谱安装的文件列表:

代码语言:javascript
复制
┌───┐
│ $ │ ziga > ziga--hypervisor > build--beaglbone_black_c2
└─┬─┘ /dev/pts/1
  └─> oe-pkgdata-util list-pkg-files qtbase qwt-qt5 application

application:
    /usr/bin/executable
qtbase:
    /usr/lib/libQt5Concurrent.so.5
    /usr/lib/libQt5Concurrent.so.5.14
    /usr/lib/libQt5Concurrent.so.5.14.2
    /usr/lib/libQt5Core.so.5
    /usr/lib/libQt5Core.so.5.14
    /usr/lib/libQt5Core.so.5.14.2
    /usr/lib/libQt5DBus.so.5
    /usr/lib/libQt5DBus.so.5.14
    /usr/lib/libQt5DBus.so.5.14.2
    /usr/lib/libQt5Gui.so.5
    /usr/lib/libQt5Gui.so.5.14
    /usr/lib/libQt5Gui.so.5.14.2
    /usr/lib/libQt5Network.so.5
    /usr/lib/libQt5Gui.so.5.14
    /usr/lib/libQt5Gui.so.5.14.2
    /usr/lib/libQt5Network.so.5
    /usr/lib/libQt5Network.so.5.14
    /usr/lib/libQt5Network.so.5.14.2
    /usr/lib/libQt5OpenGL.so.5
    /usr/lib/libQt5OpenGL.so.5.14
    /usr/lib/libQt5OpenGL.so.5.14.2
    /usr/lib/libQt5PrintSupport.so.5
    /usr/lib/libQt5PrintSupport.so.5.14
    /usr/lib/libQt5PrintSupport.so.5.14.2
    /usr/lib/libQt5Sql.so.5
    /usr/lib/libQt5Sql.so.5.14
    /usr/lib/libQt5Sql.so.5.14.2
    /usr/lib/libQt5Test.so.5
    /usr/lib/libQt5Test.so.5.14
    /usr/lib/libQt5Test.so.5.14.2
    /usr/lib/libQt5Widgets.so.5
    /usr/lib/libQt5Widgets.so.5.14
    /usr/lib/libQt5Widgets.so.5.14.2
    /usr/lib/libQt5XcbQpa.so.5
    /usr/lib/libQt5XcbQpa.so.5.14
    /usr/lib/libQt5XcbQpa.so.5.14.2
    /usr/lib/libQt5Xml.so.5
    /usr/lib/libQt5Xml.so.5.14
    /usr/lib/libQt5Xml.so.5.14.2
qwt-qt5:
    /usr/lib/libqwt.so.6
    /usr/lib/libqwt.so.6.1
    /usr/lib/libqwt.so.6.1.4

应用程序不能显示图形

现在我登录到目标并运行无法显示图形的应用程序:

代码语言:javascript
复制
root@beaglebone-yocto:~# executable

2020/09/20 10:44:26.560: Warning: Could not connect to display
2020/09/20 10:44:26.581: Info: Could not load the Qt platform plugin "xcb" in "" even though it was found.
2020/09/20 10:44:26.581: Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix the problem.

Available platform plugins are: minimal, offscreen, vnc, xcb.

Aborted

看起来,我必须以某种方式配置“QPA抽象”,QPA是Qt5的平台抽象层,有很多插件(来源),其中也包含了很多平台。

我的应用程序只使用一个窗口,所以我可能可以使用qeglfsqlinuxfb。但是,由于Beaglebone集成了Imagination的GPU PowerVR SGX530,它支持OpenGLES2.0 (来源),这就是为什么我想使用qeglfs平台。但是,请注意,当前的qeglfs平台没有在上面的错误报告中列出:

代码语言:javascript
复制
Available platform plugins are: minimal, offscreen, vnc, xcb.

通过创建一个包含以下内容的qeglfs文件,我成功地安装了qtbase_%.bbappend平台:

代码语言:javascript
复制
PACKAGECONFIG:append = " eglfs gles2"

请注意,这会激活qtbase菜谱的行:

代码语言:javascript
复制
PACKAGECONFIG[eglfs] = "-eglfs,-noeglfs,drm"
PACKAGECONFIG[gles2] = "-opengl es2,,virtual/libgles2 virtual/egl"

这些行确保编译包括eglfs和OpenGL,即gles2。我也选择在阅读/看完这篇文章(来源来源)之后加入来源

因此,我推断eglfs也需要gles2

现在,当我尝试以与前面相同的方式执行我的应用程序时,eglfs已经安装并列出:

代码语言:javascript
复制
root@beaglebone-yocto:~# executable

2020/09/20 10:44:26.560: Warning: Could not connect to display
2020/09/20 10:44:26.581: Info: Could not load the Qt platform plugin "xcb" in "" even though it was found.
2020/09/20 10:44:26.581: Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix the problem.

Available platform plugins are: eglfs, minimal, offscreen, vnc, xcb.

Aborted

但是,当我尝试使用eglfs时,我会得到错误:

代码语言:javascript
复制
root@beaglebone-yocto:~# env QT_QPA_PLATFORM=eglfs executable

2020/09/20 11:01:17.525: Warning: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
error: XDG_RUNTIME_DIR not set in the environment
error: XDG_RUNTIME_DIR not set in the environment
error: XDG_RUNTIME_DIR not set in the environment
2020/09/20 11:01:17.533: Fatal: Could not  initialize egl display
Aborted

除了最后一个错误之外,所有错误都可以通过添加一些环境变量来修复,如下所示:

代码语言:javascript
复制
root@beaglebone-yocto:~# env QT_QPA_PLATFORM=eglfs XDG_RUNTIME_DIR=/tmp/runtime-root executable

2020/09/20 11:01:17.533: Fatal: Could not initialize egl display
Aborted

但是正如您所看到的,最后一个错误仍然存在,我不知道如何修复它。

调试信息显示不出任何信息

我尝试导出一些环境变量以使调试更详细,然后再次运行应用程序:

代码语言:javascript
复制
root@beaglebone-yocto:~# export QT_LOGGING_RULES=true
root@beaglebone-yocto:~# export QSG_INFO=1
root@beaglebone-yocto:~# export QT_QPA_EGLFS_DEBUG=1
root@beaglebone-yocto:~# export QT_DEBUG_PLUGINS=1
root@beaglebone-yocto:~# export QT_QPA_PLATFORM=eglfs
root@beaglebone-yocto:~# export QT_QPA_EGLFS_INTEGRATION=none
root@beaglebone-yocto:~# export XDG_RUNTIME_DIR=/tmp/runtime-root
root@beaglebone-yocto:~# executable

2022/02/17 20:54:28.448: Debug: QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/plugins/platforms" ...
2022/02/17 20:54:28.450: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqeglfs.so"
2022/02/17 20:54:28.451: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqeglfs.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "eglfs"
        ]
    },
    "archreq": 0,
    "className": "QEglFSIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.451: Debug: Got keys from plugin meta data ("eglfs")
2022/02/17 20:54:28.451: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqlinuxfb.so"
2022/02/17 20:54:28.452: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqlinuxfb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "linuxfb"
        ]
    },
    "archreq": 0,
    "className": "QLinuxFbIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.453: Debug: Got keys from plugin meta data ("linuxfb")
2022/02/17 20:54:28.453: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqminimal.so"
2022/02/17 20:54:28.454: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqminimal.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimal"
        ]
    },
    "archreq": 0,
    "className": "QMinimalIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.454: Debug: Got keys from plugin meta data ("minimal")
2022/02/17 20:54:28.454: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqminimalegl.so"
2022/02/17 20:54:28.455: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqminimalegl.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimalegl"
        ]
    },
    "archreq": 0,
    "className": "QMinimalEglIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.456: Debug: Got keys from plugin meta data ("minimalegl")
2022/02/17 20:54:28.456: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqoffscreen.so"
2022/02/17 20:54:28.457: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqoffscreen.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "offscreen"
        ]
    },
    "archreq": 0,
    "className": "QOffscreenIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.457: Debug: Got keys from plugin meta data ("offscreen")
2022/02/17 20:54:28.457: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqvnc.so"
2022/02/17 20:54:28.458: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqvnc.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "vnc"
        ]
    },
    "archreq": 0,
    "className": "QVncIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.458: Debug: Got keys from plugin meta data ("vnc")
2022/02/17 20:54:28.459: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/platforms/libqxcb.so"
2022/02/17 20:54:28.459: Warning: Found metadata in lib /usr/lib/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "archreq": 0,
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.460: Debug: Got keys from plugin meta data ("xcb")
2022/02/17 20:54:28.460: Debug: QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
2022/02/17 20:54:28.512: Debug: loaded library "/usr/lib/plugins/platforms/libqeglfs.so"
2022/02/17 20:54:28.513: Debug: QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/plugins/egldeviceintegrations" ...
2022/02/17 20:54:28.514: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/egldeviceintegrations/libqeglfs-emu-integration.so"
2022/02/17 20:54:28.515: Warning: Found metadata in lib /usr/lib/plugins/egldeviceintegrations/libqeglfs-emu-integration.so, metadata=
{
    "IID": "org.qt-project.qt.qpa.egl.QEglFSDeviceIntegrationFactoryInterface.5.5",
    "MetaData": {
        "Keys": [
            "eglfs_emu"
        ]
    },
    "archreq": 0,
    "className": "QEglFSEmulatorIntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.516: Debug: Got keys from plugin meta data ("eglfs_emu")
2022/02/17 20:54:28.516: Debug: QFactoryLoader::QFactoryLoader() looking at "/usr/lib/plugins/egldeviceintegrations/libqeglfs-x11-integration.so"
2022/02/17 20:54:28.517: Warning: Found metadata in lib /usr/lib/plugins/egldeviceintegrations/libqeglfs-x11-integration.so, metadata=
{
    "IID": "org.qt-project.qt.qpa.egl.QEglFSDeviceIntegrationFactoryInterface.5.5",
    "MetaData": {
        "Keys": [
            "eglfs_x11"
        ]
    },
    "archreq": 0,
    "className": "QEglFSX11IntegrationPlugin",
    "debug": false,
    "version": 331264
}


2022/02/17 20:54:28.517: Debug: Got keys from plugin meta data ("eglfs_x11")
2022/02/17 20:54:28.517: Debug: QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/egldeviceintegrations" ...
2022/02/17 20:54:28.543: Fatal: Could not initialize egl display

现在,我得到了更多的数据,但没有关于最后的错误!这句话和以前一样不冗长。真的很没用!

GPU是由内核发现的,但没有使用。

我还确保在devicetree的GPU设备节点中添加了status = "okay"。这就启用了GPU探测。所以现在我可以在dmesg上看到

代码语言:javascript
复制
[    0.000000] AM335X ES2.1 (sgx neon)

我还安装了可执行的kmscube,我可以成功地执行,它用着色器呈现了一个立方体。但它是缓慢的,top透露,它使用了我100%的CPU!所以在这种情况下可能没有使用GPU!

我的显示器控制器和面板

我的设备上有两个连接器-第一个是HDMI,第二个是我的嵌入式面板。我安装了modetest DRM & KVM实用程序,它显示了如何设置显示控制器和面板:

代码语言:javascript
复制
trying to open device 'i915'...failed
trying to open device 'amdgpu'...failed
trying to open device 'radeon'...failed
trying to open device 'nouveau'...failed
trying to open device 'vmwgfx'...failed
trying to open device 'omapdrm'...failed
trying to open device 'exynos'...failed
trying to open device 'tilcdc'...done
Encoders:
id  crtc    type    possible crtcs  possible clones 
33  32  LVDS    0x00000001  0x00000001
35  0   TMDS    0x00000001  0x00000002

Connectors:
id  encoder status      name        size (mm)   modes   encoders
34  33  connected   LVDS-1          0x0     1   33
  modes:
    index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  #0 800x480 34.89 800 840 888 928 480 493 496 525 17000 flags: nhsync, nvsync; type: preferred, driver
  props:
    1 EDID:
        flags: immutable blob
        blobs:

        value:
    2 DPMS:
        flags: enum
        enums: On=0 Standby=1 Suspend=2 Off=3
        value: 0
    5 link-status:
        flags: enum
        enums: Good=0 Bad=1
        value: 0
    6 non-desktop:
        flags: immutable range
        values: 0 1
        value: 0
    4 TILE:
        flags: immutable blob
        blobs:

        value:
    20 CRTC_ID:
        flags: object
        value: 32
36  0   disconnected    HDMI-A-1        0x0     0   35
  props:
    1 EDID:
        flags: immutable blob
        blobs:

        value:
    2 DPMS:
        flags: enum
        enums: On=0 Standby=1 Suspend=2 Off=3
        value: 0
    5 link-status:
        flags: enum
        enums: Good=0 Bad=1
        value: 0
    6 non-desktop:
        flags: immutable range
        values: 0 1
        value: 0
    4 TILE:
        flags: immutable blob
        blobs:

        value:
    20 CRTC_ID:
        flags: object
        value: 0

CRTCs:
id  fb  pos size
32  37  (0,0)   (800x480)
  #0 800x480 34.89 800 840 888 928 480 493 496 525 17000 flags: nhsync, nvsync; type: preferred, driver
  props:
    22 ACTIVE:
        flags: range
        values: 0 1
        value: 1
    23 MODE_ID:
        flags: blob
        blobs:

        value:
            68420000200348037803a0030000e001
            ed01f0010d020000230000000a000000
            48000000383030783438300000000000
            00000000000000000000000000000000
            00000000
    19 OUT_FENCE_PTR:
        flags: range
        values: 0 18446744073709551615
        value: 0
    24 VRR_ENABLED:
        flags: range
        values: 0 1
        value: 0

Planes:
id  crtc    fb  CRTC x,y    x,y gamma size  possible crtcs
31  32  37  0,0     0,0 0           0x00000001
  formats: BG16 RG24 XR24
  props:
    8 type:
        flags: immutable enum
        enums: Overlay=0 Primary=1 Cursor=2
        value: 1
    17 FB_ID:
        flags: object
        value: 37
    18 IN_FENCE_FD:
        flags: signed range
        values: -1 2147483647
        value: -1
    20 CRTC_ID:
        flags: object
        value: 32
    13 CRTC_X:
        flags: signed range
        values: -2147483648 2147483647
        value: 0
    14 CRTC_Y:
        flags: signed range
        values: -2147483648 2147483647
        value: 0
    15 CRTC_W:
        flags: range
        values: 0 2147483647
        value: 800
    16 CRTC_H:
        flags: range
        values: 0 2147483647
        value: 480
    9 SRC_X:
        flags: range
        values: 0 4294967295
        value: 0
    10 SRC_Y:
        flags: range
        values: 0 4294967295
        value: 0
    11 SRC_W:
        flags: range
        values: 0 4294967295
        value: 52428800
    12 SRC_H:
        flags: range
        values: 0 4294967295
        value: 31457280

Frame buffers:
id  size    pitch

这里的一切看起来都是正确的,总的来说,我的显示器运转良好。所以这可能不是我问题的根源。

EN

回答 1

Stack Overflow用户

发布于 2022-01-13 17:57:56

在Beagleboard论坛上,这似乎是一个类似的问题。开发人员能够修复它这样做:

“我使用以下选项更新了内核:./update_kernel.sh -ti-channel --lts-4_14 -sgx,我不得不安装一个额外的软件包: apt安装libdrm-dev,我必须做一个定制的GBM库安装,在这里概述了9。似乎并不是所有的东西都是作为映像的一部分正确设置的。”

来源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70591038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档