This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] QtWebEngine 代码在 AM437x-EVM 上崩溃

Guru**** 2535150 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/994810/qtwebengine-code-crashing-on-am437x-evm

我们使用的是 Qt 5.6.3、并且我们集成了 QtWebEngine。 我们创建了一个小型 Qt 应用程序来显示 HTML 页面。 当我们在目标(TI AM437X-EVM)上执行它时、应用程序会崩溃并出现错误、如下所示

错误:gl_surface_qt.cpp (477)] eglCreatePbufferSurface 失败、错误 EGL_BAD_MATCH
错误:gl_surface_qt.cpp (622)]请求的 OpenGL 平台不受支持。
非法指令

我们使用 Yocto 构建了 Linux 映像和 SDK、其中包括 Qt 5.6.3以及 OpenGL ES2。 我们已从图像中删除 X11和 Wayland。 我们能够构建 QtWebEngine 和 QtWebSockets。 但应用程序抛出错误、并且无法正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是调试日志

    QT.QPA.egldeviceintegration:EGL 器件集成插件密钥:("eglfs_kms_egldevice"、"eglfs_kms")
    QT.QPA.egldevicegintegration:EGL 器件集成插件密钥(排序):("eglfs_kms"、"eglfs_kms_egldevice")
    QT.QPA.egldeviceintegration:尝试加载器件 EGL 集成"eglfs_kms"
    QT.QPA.egldevicesintegration:使用 EGL 器件集成"eglfs_kms"
    QT.QPA.eglfs.kms:从"/etc/qt5/eglfs_kms_cfg.json 加载 KMS 设置
    QT.QPA.eglfs.kms:配置:
    hwcursor:false
    pbuffers:true
    分页屏幕:错误
    输出:QMap()
    QT.QPA.eglfs.kms:使用配置文件中指定的 DRM 器件"/dev/dri/card0
    Qt.qpa.eglfs.kms:正在打开设备“/dev/dri/card0”
    Qt.QPA.eglfs.kms:为从/dev/dri/card0获取的文件描述符4创建 GBM 器件
    QT.QPA.eglfs.kms:"UNKNOWN1"模式计数:1.
    QT.QPA.eglfs.kms:模式0 800 x 480 @ 60 Hz
    QT.QPA.eglfs.kms:选择的模式0:800 x 480 @ 60Hz (对于输出 UNKNOWN1)
    qt.qpa.input: evdevkeyboard:使用设备发现
    类型 QFlags (0x8)的 qt.qpa.input: udev 设备发现
    qt.qpa.input:找到匹配的器件("/dev/input/event1)
    qt.qpa.input:在"/dev/input/event1 "添加键盘
    qt.qpa.input:尝试为"/dev/input/event1 ""创建键盘处理程序
    qt.qpa.input:打开键盘,网址为“/dev/input/event1”
    qt.qpa.input:为设备"/dev/input/event1 "创建键盘处理程序
    qt.qpa.input:卸载当前键位映射并内置恢复
    qt.qpa.input: numlock=0、capslock=0、scrolllock=0
    qt.qpa.input: evdevmouse:使用设备发现
    类型 QFlags (0x1|0x2)的 qt.qpa.input: udev 设备发现
    qt.qpa.input:找到匹配的器件()
    qt.qpa.input: evdevtouch:使用设备发现
    类型 QFlags (0x2|0x4)的 qt.qpa.input: udev 设备发现
    qt.qpa.input:找到匹配的器件("/dev/input/event0)
    qt.qpa.input: evdevtouch:在"/dev/input/event0 "添加设备
    qt.qpa.input: evdevtouch:使用器件/dev/input/event0
    为格式 QSurfaceFormat (2.0版、选项 QFlags()、depthBufferSize -1、redcBufferSize 8、GreenBufferSize 8、 blueBufferSize 8、alpha BufferSize -1、stencilBufferSize -1、samples -1、swapBehavior 2、 swapInterval 1、profile 0)与 config:
    qt.qpa.input: evdevtouch:/dev/input/event0:协议类型 B (多)
    qt.qpa.input: evdevtouch:/dev/input/event0:min X:0 max X:1023
    qt.qpa.input: evdevtouch:/dev/input/event0:最小 Y:0最大 Y:599
    qt.qpa.input: evdevtouch:/dev/input/event0:最小压力:0最大压力:0
    qt.qpa.input: evdevtouch:/dev/input/event0:器件名称:Pixcir_tangoc
    EGL_buffer_size:24
    EGL_alpha_size:0
    EGL_blue_size:8.
    EGL_GREEN 大小:8.
    EGL_RED_SIZE:8.
    EGL_DEPTY_SIZE:0
    EGL_Stence_size:0
    EGL_CONFIG_CAVATE:12344
    EGL_CONFIG_ID:5.
    EGL_LEVEL:0
    EGL_MAX_Pbuffer_height:0
    EGL_MAX_Pbuffer_pixels:0
    EGL_MAX_Pbuffer_width:0
    EGL_NATE_RENDERABLE:1.
    EGL_native_visual:875713112
    EGL_native_visual:12344
    EGL_Samples:0
    EGL_SAMPLE_BUFFERS:0
    EGL_surface_type:4.
    EGL_Transparenty_type:12344
    EGL_Transparenty_blue_value:0
    EGL_Transparenty_GREEN 值:0
    EGL_Transparenty_red_value:0
    EGL_bind_TO_纹 理_RGB:0
    EGL_BIND_TO_TEST_RGBA:0
    EGL_MIN_SWAP_INTERVAL:1.
    EGL_MAX_SWAP_INTERVAL:1.
    警告:在创建全局共享上下文后使用不同版本或配置文件设置新的默认格式可能会导致上下文共享问题。
    Qt.scenegraph.general:线程渲染循环
    Qt.scenegraph.general:使用 SG 动画驱动程序
    Qt.scenegraph.general:Animation Driver:Using vsync:16.67ms
    QT.QPA.eglfs.kms:为屏幕"UNKNOWN1"创建窗口
    为格式 QSurfaceFormat (2.0版、选项 QFlags()、depthBufferSize 24、redBufferSize 8、GreenBufferSize 8、 blueBufferSize 8、alpha BufferSize -1、stencilBufferSize 8、samples -1、swapBehavior 2、 swapInterval 1、profile 1) with config:
    EGL_buffer_size:24
    EGL_alpha_size:0
    EGL_blue_size:8.
    EGL_GREEN 大小:8.
    EGL_RED_SIZE:8.
    EGL_DEPTY_SIZE:24
    EGL_Stence_size:8.
    EGL_CONFIG_CAVATE:12344
    EGL_CONFIG_ID:7.
    EGL_LEVEL:0
    EGL_MAX_Pbuffer_height:0
    EGL_MAX_Pbuffer_pixels:0
    EGL_MAX_Pbuffer_width:0
    EGL_NATE_RENDERABLE:1.
    EGL_native_visual:875713112
    EGL_native_visual:12344
    EGL_Samples:0
    EGL_SAMPLE_BUFFERS:0
    EGL_surface_type:4.
    EGL_Transparenty_type:12344
    EGL_Transparenty_blue_value:0
    EGL_Transparenty_GREEN 值:0
    EGL_Transparenty_red_value:0
    EGL_bind_TO_纹 理_RGB:0
    EGL_BIND_TO_TEST_RGBA:0
    EGL_MIN_SWAP_INTERVAL:1.
    EGL_MAX_SWAP_INTERVAL:1.
    Qt.scenegraph.general:Animation Driver:Using vsync:16.67ms
    Qt.scenegraph.general:纹理 Atlas 尺寸:1024x512
    Qt.scenegraph.general:R/G/B/A 缓冲区:8 8 0
    Qt.scenegraph.general:深度缓冲区:24
    QT.scegraph.general:stencil Buffer:8.
    Qt.scenegraph.general:样片:0
    Qt.scenegraph.general:GL_vendor:Imagination Technologies
    Qt.scenegraph.general:GL_Renderer:PowerVR SGX 530
    Qt.scenegraph.general:GL_version:OpenGL ES 2.0 Build 1.17@4948957
    Qt.IMG scenegraph.general:format_extension: gL_Oes_FBO_rase_mipmap gL_Oes_vertex_array_object gL_IMG_tete_compression_pvrgtc_Oes_EGL_SYNC GL_OESS_tore_half_gL_OEST_gL_OEST_GL_GL_GL_GL_CL_GEFOR_CL_CL_CL_CL_CL_CL_CL_GET_OEST_CL_CL_GEFORM_OEST_CL_CL_GEFORM_OEST_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_GE_CL_CL_CL_GE_CL_CL_CL_CL_CL_GE_CL_CL_CL_CL_GE_CL_CL_CL_CL_CLOBJEST_FORM_EST_FORM_EST_FORM_EST_FORM_EST_CL_CL_CL_CL_GE_CL_CL_GE_CL_
    QT.scenegraph.general:最大纹理大小:2048
    Qt.scenegraph.general:调试上下文:false
    qt.qpa.input: evdevtouch:更新 QInputDeviceManager 器件数:1个触控器件、0个待处理程序
    [0420/004526:错误:gl_surface_qt.cpp (477)] eglCreatePbufferSurface 失败、错误 EGL_BAD_MATCH
    [0420/004526:错误:gl_surface_qt.cpp (622)]请求的 OpenGL 平台不受支持。

    我看到 pbuffer 参数的值为零。 这可能是 EGL_BAD_MATCH 的原因。 我无法更改该值。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想知道您是否可以在 PSDK6.3上尝试相同的测试。

    参考 链接: https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-AM437X#release-notes

    此致、
    Krunal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我下载了 TI SDK 和 rootfs。 已运行 TI rootfs 提供的示例代码。 重新编译了我的 qtwebengine 应用程序并在目标上运行它。 它在工作。。。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个区别是 TI 使用的是陆地、而我们不使用。 我将建造路线,并将其与根部结合起来,然后尝试一下。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想知道您是否可以使用命令"/etc/init.d/weston stop"禁用 Weston。 接下来、使用"-platform eglfs"启动 Qt 应用程序。 请在重建 rootfs 之前尝试一下。

    此致、
    Krunal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的图片中没有 Weston。 我们将使用-platform eglfs 启动 Qt 应用程序。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在 PSDK6.3上、有一个错误导致在启动 Qt 应用时 CPU 使用率增加。 我建议您从 Yocto "0001-eglfs_kms-enhage-the -qpa-for-multiple-display-and-U.patch"中删除以下补丁、并重建 Qt 包。

    此致、
    Krunal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有看到  针对 Qt 5.6.3应用"0001-eglfs_kms-enher-the -QPA-for-multiple-display-and-U.patch"补丁。 您是否还在使用 Qt Quick 2D 渲染器和场景图形插件? 我使用 scenegraph 插件重建我的图像、并且能够呈现 HTML 应用程序。 根据我的理解、它会跳过 OpenGL。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有看到  针对 Qt 5.6.3应用"0001-eglfs_kms-enher-the -QPA-for-multiple-display-and-U.patch"补丁。 您是否还在使用 Qt Quick 2D 渲染器和场景图形插件? 我使用 scenegraph 插件重建我的图像、并且能够呈现 HTML 应用程序。 根据我的理解、它会跳过 OpenGL。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    Qt5.11中存在上述补丁、我建议您检查 Qt 是否 QtQuick/Scenegraph 使用了光电转换器。

    此致、
    Krunal