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.

[参考译文] PROCESSOR-SDK-AM335X:AM335x:TI-SGX-DDK-UM:Weston:QT 5.15:

Guru**** 2546830 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1423409/processor-sdk-am335x-am335x-ti-sgx-ddk-um-weston-qt-5-15

器件型号:PROCESSOR-SDK-AM335X

工具与软件:

您好!

我正在将基于 Embedian smartct35x (AM335x)的平台升级到 Yocto Kirkstone (processor-sdk-09.01.00-legace-config.txt)、并且我在让 Weston 使用 TI 提供的"用户模式"驱动程序包 ti-SGX-DDK-um 时遇到了一些问题、我看到尝试加载的错误(例如 Weston-EGL):

[destroyed object]: error 7: importing the supplied dmabufs failed
The Wayland connection experienced a fatal error: Protocol error


在日志中:

Oct 10 09:36:37 am335x-deltatouch weston[7488]: CreateImageSharedFromDmaBufs: Failed to create buffer for shared image
Oct 10 09:36:37 am335x-deltatouch weston[7488]: [09:36:37.528] Error during import, and no known conversion for format AR24 in the renderer
Oct 10 09:36:37 am335x-deltatouch weston[7488]: [09:36:37.528] libwayland: error in client communication (pid 7487)


除了需要 EGL 支持的示例之外、所有 Weston 示例似乎都起作用。

"weston-simple-dmabuf-EGL"的输出:

This client was written with the purpose of manually test Weston's dma-buf feedback implementation. See main() description for more details on how to test this.

compositor sent main_device event for dma-buf feedback - /dev/dri/renderD128
├──────target_device for tranche - /dev/dri/renderD128
│       └scanout tranche? no
│       ├────────tranche format/modifier pair - format ARGB8888, modifier NONE_INVALID_MODIFIER (0xffffffffffffff)
│       ├────────tranche format/modifier pair - format XRGB8888, modifier NONE_INVALID_MODIFIER (0xffffffffffffff)
│       └end of tranche
└end of dma-buf feedback

weston-simple-dmabuf-feedback: ../../../../../../workspace/sources/weston/clients/simple-dmabuf-feedback.c:403: create_fbo_for_buffer: Assertion `buffer->egl_image != EGL_NO_IMAGE_KHR && "error: EGLImageKHR creation failed"' failed.
Aborted (core dumped)


我已经尝试了 AM335x-evm.conf 的参考设计、其设置为使用"DESA-PVR"作为提供方、但这里我有一个问题、那就是使用 MACHINE_FEATURE 'SGX'进行编译时不会生成所需的"PVR_DRI.SO"插件、但有一个"SGX_DRI.SO"。 据我所知、mesa-PVR 支持是最近推出的、因此我检查了较旧的配置、例如 Dunfell、他们在那里使用预编译的用户模式二进制包。

因此,我决定改变食谱做同样的,并为 Kirkstone 安装预编译的用户模式二进制文件。

TI-SGX-DDK-um:omap5-SGX-DDK-um-linux
TI-SGX-DDK-km:omap5-SGX-DDK-Linux

Yocto 机器配置设置:

# Graphics providers and variables
MACHINE_EXTRA_RDEPENDS += "ti-sgx-ddk-km"
DEPENDS:remove = "virtual/libgl"
PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
PREFERRED_PROVIDER_virtual/libgles1 = "ti-sgx-ddk-um"
PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
PREFERRED_PROVIDER_virtual/gpudriver = "ti-sgx-ddk-km"


非常感谢您的任何帮助。

谢谢。

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

    您好、我们的专家本周不在办公室。 如果您尚未收到回复、请在下周同一时间点击此处联系我们

    谢谢!

    Paula.

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

    一些附加信息:

    我已经创建了两个简单的 QT 应用程序,一个带有 QML 和一个正常的小部件"Hello world",小部件一在 Weston 下工作正常。 QML 由于某种原因不起作用。

    关于我的另一篇文章中提到的缓冲区问题、这可能是已知问题、请参阅提交日志:

    git.ti.com/.../

    我在其他地方读到 QML 需要 QML 的 QT Quick 2D 渲染器。

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

    您好!

    使用默认的9.x SDK 时您是否看到过类似的问题?

    此致、
    Krunal

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

    尊敬的 Krunal:

    感谢您的答复。

    遗憾的是、我没有 EVM、我使用 am335x-evm.conf 作为起点、因为它们有类似的基础(am33xx)。

    谢谢。

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

    您好!

    我刚刚在内部进行了检查、Weston-Simple-EGL 和 Weston-Simple-dabuff 目前都已损坏。 我们正在开发一个新版本、其中我们将介绍 Weston-Simple-EGL、但 dmabuff 示例仍被打破。 对于 Qt、它应该是功能性的、以及在运行 QML 文件时会遇到哪些错误。

    此致、
    Krunal

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

    您好、Krunal、

    对于上下文:

    -我比较两个测试应用程序, testgui (基于小部件)和 testqml (基于 qml)。
    -在运行任何这些之前,我确保韦斯顿是停止.
    -我使用-platform eglfs 和-platform wayland 运行的两个应用程序(默认 Weston)
    -运行前,我设置环境:
     导出 weston_debug=1;导出 EGL_log_level=debug;导出 LIBGL_debug=verbose;导出 mas_debug=1;导出 mas_verbos=1; 导出 QT_QPA_EGLFS_DEBUG=1;导出 galum_HUD=simple、fps、CPU、draing-calls;导出 WAYLAND_DEBUG=1;导出 QT_logging_rules="qt.qml.debug=true"
    -我捕获了直接应用程序输出和日志记录在所有情况下。


    结果:
    -使用 eglfs 运行 testqml 不起作用,屏幕上没有输出,日志中有一个错误"移动光标失败"不确定它是否相关。 请参阅 TEST_QML.log。
    -在 Wayland|Weston 中运行 testqml 不工作, Weston windownmanager 显示在屏幕上,但没有 testqml GUI ,请参阅: testqml_Weston.log。 testqml_weston_journal.log 中有一些附加消息。
    -我可以运行 testgui 在 Wayland|Weston 没有问题, Weston WindowManager 显示与 testgui ,请参阅 testgui_weston.log 和 testgui_Weston_journal.log。
    -使用 eglfs 运行 testgui 不起作用,权限错误,请参阅: test_gui_eglfs.log (没有其他日志记录)


    优先级:
    1)我需要的最重要的事情是 QML 版本在 Weston 上运行。
    2)理解为什么运行 eglfs 会导致权限被拒绝是很好的。


    配置:

    #图形提供者和变量
    MACHINE_EXTRA_RDEPENDS +="ti-SGX-DDK-KM"
    # dependences:remove ="virtual/libgl"
    preferred_provider_virtual/libgl ="ti-SGX-DDK-um"
    preferred_provider_virtual/EGL ="ti-SGX-DDK-um"
    preferred_provider_virtual/libgles1 ="ti-SGX-DDK-um"
    preferred_provider_virtual/libgles2 ="ti-SGX-DDK-um"
    preferred_provider_virtual/libgbm ="ti-SGX-DDK-um"
    preferred_provider_virtual/gpudriver ="ti-SGX-DDK-KM"

    #机器功能
    machine_features ="apm usbgadget usbhost vfat ext2 alsa GPU 屏幕触摸屏 SGX"

    PACKAGECONFIG:pn-qtbase ="释放辅助功能 dbus udev evdev libs fontconfig FreeType pcre openssl jpeg libpng zlib 并发 gles2 linuxfb gif kms libinput icu widget sql-mysql xkbcommon"

    IMAGE_INSTALL +="\
       devicetre 内核模块 amx3-cm3 weston-examples libdrm libgbm libdrm-tests ti-SGX-DDK-km ti-SGX-DDK-um \
       packagegroup-arago-qte qtwayland qt5-opengles2-test cinematicexperience qt5everydemo qt5ledscreen qt5nmapcarousedemo qt5nmapper \
       qtsystems qtimageFormats qtsensors qtscript qtserialport qtsvg qttranslations qtquickcontrols2 \
       qtxmlpatterns qttools"


    我附上了所有日志文件和测试项目文件以供参考。

    e2e.ti.com/.../testgui_5F00_weston.log
    e2e.ti.com/.../testqml_5F00_weston_5F00_journal.log
    e2e.ti.com/.../testqml_5F00_eglfs.log

    e2e.ti.com/.../testgui_5F00_weston.log
    e2e.ti.com/.../testgui_5F00_weston_5F00_journal.log
    e2e.ti.com/.../testgui_5F00_eglfs.log

    e2e.ti.com/.../test_5F00_project_5F00_files.zip

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

    您好!

    让我来看看我们 EVM 上的上述行为、您会得到发帖。

    此致、
    Krunal

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

    尊敬的 Krunal:

    我发现与 QML 相关的问题未显示、这是我的错。 我的 QML 文件更改、在部署到我的目标时未同步到"工具工作区"。 这基本上与导入正确的 QuickControls 有关、即导入 QtQuick。 控制2.15.

    因此、至少我知道 QT 工作正常、我还可以使用-platform "vnC"查看我的 QML 视图。

    但当我尝试使用'-platform wayland'运行时,我有你提到的损坏的缓冲区问题,即:

    wl_display@1.sync(new id wl_callback@25)
    [4271652.848] wl_display@1.error(nil, 7, "importing the supplied dmabufs failed")
    [destroyed object]: error 7: importing the supplied dmabufs failed
    The Wayland connection experienced a fatal error: Protocol error



    当使用'-platform eglfs'运行时、我现在的结果与"testgui"示例相同、即:

    Could not set DRM mode for screen LVDS1 (Permission denied)
    Could not queue DRM page flip on screen LVDS1 (Permission denied)


    在公路上运行 QML (使用缓冲区)对我们的应用非常关键、您是否知道何时会出现修复?或者是否有我可以应用的临时权变措施?

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

    您好!

    权限被拒绝是因为 Weston 正在运行、并且在您通过"eglfs"时、您能否确保没有后端正在运行。 运行 eglfs 时,它将尝试接管整个屏幕,如果韦斯顿或其他服务正在运行,您将收到权限被拒绝错误。  

    只是为了确认,如果您启动您的 EVM ,您应该看到 Weston 屏幕,如果您尝试运行 Qt 应用程序没有"--platform wayland",那么您还会看到缓冲区错误吗?

    此致、
    Krunal

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

    我将在今天晚些时候与我们的开发人员联系、并回复给您。

    此致、
    Krunal

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

    尊敬的 Krunal:  

    谢谢你。 我还对为什么我得到无效参数感兴趣、是我必须在配置文件中设置的参数、因为它也在抱怨这个问题。  

    此致。  

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

    您好!

    我相信您提前分享了您的 QML 应用程序、但您能再次分享一下、以便我们进行测试。 我只是想确保我们都在测试相同的最新应用程序。  

    此致、
    Krunal

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

    没问题。

    e2e.ti.com/.../3681.test_5F00_project_5F00_files.zip

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

    您好!

    如上所述、我们正在开发一个新版本、该版本应该能够解决您的问题。 我们的开发团队运行您的应用程序,我们 看到 一个青色的盒子,上面写着"Hello , QML!" 屏幕中间。 我假设这是预期的输出、您能否确认。

    此致、
    Krunal

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

    尊敬的 Krunal:  

    是的,这确实是预期的。 对于您正在处理的新版本、这是结果还是对于我正在使用的当前版本? 提前感谢您、这听起来很有希望。  

    此致、

    Raymond。  

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

    尊敬的 Raymond:

    以上测试是 在我们新发布的驱动程序中完成的、我们正在解决9.x 版本中的错误。

    此致、
    Krunal

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

    尊敬的 Krunal:

    令人兴奋的! 如果可用、请告诉我、我将立即进行测试。

    谢谢。

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

    尊敬的 Krunal:

    有什么我可以尝试的,我可以签出的分支,我可以帮助测试.

    谢谢。

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

    您好!

    我刚内部检查,似乎我们昨晚推送了以下补丁: https://lore.kernel.org/yocto-meta-ti/20241018005602.225710-1-rs@ti.com/T/#u。

    此致、
    Krunal

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

    您好、Krunal、

    谢谢您的回答。 我应用了补丁、确实取得了进展。 我现在可以将 Weston 与一起显示 QML 屏幕。

    问题是、性能真的很差、例如、将 GUI 屏幕带到前景"淡入"需要花费大量时间、并且单击按钮也需要很长时间才能做出反应。

    这个东西是否仍在工作、我是否可以通过调试会话给您一些有用的东西?

    谢谢、

    Raymond。

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

    您好!

    是否加载了 GPU? 例如、如果您运行 lsmod | grep PVR 命令、您会看到 GPU 正在初始化吗? 我只是想确保它不是软件光栅化的。  

    此致、
    Krunal

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

    尊敬的 Krunal:

    好消息!

    好的、进一步挖掘后、我发现它尝试使用_dri 将加载的驱动程序链接到用户模式驱动程序。 加载的驱动程序是 tilcdc、因此 tilcdc_dri.so。 但是 Mesa 未在/usr/lib/dri.中安装此驱动程序

    我记得 Yocto 图形堆栈配置"pvr_display_controller_alias"中的一个设置、显然这必须与内核显示驱动程序的名称匹配、即 tilcdc。

    这是某种无文档记录的开关、用于控制要加载的接口、现在 Mesa 生成 tilcdc_dri.so 对象。

    libGL: Can't open configuration file /etc/drirc: No such file or directory.
    libGL: Can't open configuration file /home/root/.drirc: No such file or directory.
    libEGL debug: using driver tilcdc for 8
    
    libGL: Can't open configuration file /etc/drirc: No such file or directory.
    libGL: Can't open configuration file /home/root/.drirc: No such file or directory.
    libEGL debug: MESA-LOADER: device is not located on the PCI bus
    
    libEGL debug: using driver tilcdc for 8
    
    libEGL debug: !!!! Name: tilcdc: _dri
    
    libEGL debug: !!!! PATH: /usr/lib/dri/tilcdc_dri.so
    
    libEGL debug: MESA-LOADER: dlopen(/usr/lib/dri/tilcdc_dri.so)


    扼要重述:

    您提供的补丁与以下 Yocto 配置设置结合使用:

    require conf/machine/include/mesa-pvr.inc
    PREFERRED_PROVIDER_virtual/gpudriver ?= "ti-sgx-ddk-km"
    PVR_DISPLAY_CONTROLLER_ALIAS ?= "tilcdc"


    Weston 现在正在显示我的 QML 屏幕、我可以继续!! 此外、关闭某个缓冲区驱动程序时、我不会出现内核恐慌。 感谢您和您的团队解决这一问题!

    此外、我还尝试了其他模式(我的应用不需要这些模式)、但可能会为您或其他读者提供帮助。


    ./testqml -platform eglfs
    
    Could not set DRM mode for screen LVDS1 (Invalid argument)
    Could not queue DRM page flip on screen LVDS1 (Invalid argument)
    
    ./testqml -platform minimalegl
    
    libEGL debug: EGL user error 0x300b (EGL_BAD_NATIVE_WINDOW) in eglCreateWindowSurface: _eglCreateWindowSurfaceCommon
    
    Could not create the egl surface: error = 0x300b
    
    MESA: info: Unloaded libpvr_dri_support.so
    EGL error
    Aborted (core dumped)
    
    ./testqml -platform wayland-egl -> works
    ./testqml -platform wayland -> works
    ./testqml -platform linuxfb -> works
    ./testqml -platform vnc -> works


    如果我发现任何其他信息、我可以将其发布在此处。 如果有其他任何事情、我可以做或帮助进行测试、请告知我。

    非常感谢

    Raymond。

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

    尊敬的 Raymond:

    棒极了、感谢您的更新、如果您遇到其他问题、请告诉我们。  关于 EGLFS、您是否可以尝试设置 以下变量: QT_QPA_EGLFS_FORCE_RGBA?

    此致、
    Krunal

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

    尊敬的 Krunal:

    我已经尝试了你的建议,我惊讶的是,现在 eglfs 也起作用。
    平台"inimalegl"仍然损坏。 很高兴这也能起作用、谢谢。  

    在任何地方都没有记录"QT_QPA_EGLFS_FORCE_RGBA"、也无法在 Google 搜索中找到它。 在元数据层中搜索时、此变量在"'meta-arago-distry"中引入、补丁为:

    0001-eglfs-Force-888-format-only、on-env-flag.patch

    我可以继续、遇到另一个错误、这一个在使用 QML 和"PNG"图像时处于 QT 状态。 QQmlComponent::create 上存在死锁。

    我在这里发现了一个错误报告: https://bugreports.qt.io/browse/QTBUG-90629、但是没有解决方案。

    也许最好也在 meta-arago-distro 中为它引入一个补丁。

    此致、

    Raymond。

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

    尊敬的 Krunal:

    下面是我的补丁、作为 qimage 图像转换例程中死锁的权变措施。 在本例中、我不需要线程池来进行映像转换。

    qtbase_%.bbappend

    SUMMARY = "Bugfixes for qtbase."
    FILESEXTRAPATHS:append := "${THISDIR}/${PN}"
    
    # This patch in meta-arago-distro breaks the QT platform plugin for eglfs. 
    # The following error will be shown when runnint with -platform eglfs:
    # Could not set DRM mode for screen LVDS1 (Invalid argument)
    # Could not queue DRM page flip on screen LVDS1 (Invalid argument)
    
    SRC_URI:remove = "file://0001-eglfs-Force-888-format-only-on-env-flag.patch"
    
    # This patch is a workaround to prevent a deadlock in QImage image conversion. 
    # See: bugreports.qt.io/.../QTBUG-90629
    SRC_URI:append = "file://0001-Workaround-deadlock-QImage-conversion-hangs-on-futex.patch"

    0001-Workaround-Deadance-QImage-conversion-hangs-on-futex.patch

    From 9965ebb0d00aba5d70ce7eec4ccbe024c2f790dc Mon Sep 17 00:00:00 2001
    From: Raymond Siudak <raymond.siudak@justembed.nl>
    Date: Wed, 23 Oct 2024 13:42:00 +0200
    Subject: [PATCH] Workaround: deadlock QImage conversion, hangs on futex.
    
    In this version it will run into a deadlock in
    'convert_generic_inplace' in qimage_conversion.cpp.
    
    As a workaround, disable thread pool for Qimage operations.
    
    QTBUG: bugreports.qt.io/.../QTBUG-90629
    This should be fixed in newer versions, but the newer version is not
    yet supported by meta-qt5.
    ---
     src/gui/image/qimage_conversions.cpp | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp
    index 9257ab8cfe..a81ee00d6b 100644
    --- a/src/gui/image/qimage_conversions.cpp
    +++ b/src/gui/image/qimage_conversions.cpp
    @@ -51,7 +51,7 @@
     #ifdef Q_OS_WASM
     // WebAssembly has threads; however we can't block the main thread.
     #else
    -#define QT_USE_THREAD_PARALLEL_IMAGE_CONVERSIONS
    +// #define QT_USE_THREAD_PARALLEL_IMAGE_CONVERSIONS
     #endif
     #endif
     
    -- 
    2.34.1
    
    


    一切似乎都在工作,谢谢你的帮助。  

    谢谢 Raymond。