【问题标题】:Out-of-tree galcore build causing Qt seg fault导致 Qt 段错误的树外 galcore 构建
【发布时间】:2018-09-20 04:56:51
【问题描述】:

我使用 Yocto (Krogoth) 来构建我的 imx6 映像和工具链,但是在内核驱动程序上工作有点繁重和缓慢。因此,我的开发周期是自己构建内核,只需使用在 yocto 中运行的“do_patch”的输出作为源代码树基础并获取工具链环境。

这通常不是问题,因为我主要关注的是软件堆栈的那一端。但是,我现在需要能够在不断更新的内核之上运行 Qt 应用程序(在 eglfs 下运行),以寻找错误。为此,我需要 imx6 图形驱动程序工作,所以我从 git://github.com/Freescale/kernel-module-imx-gpu-viv.git 获取 galcore 源代码导出我的内核构建目录,制作并部署它。该模块完美加载。但是,运行已经使用 Yocto 构建的工作应用程序会导致崩溃,在 libQt5EglDeviceIntegration.so.5 中的某个位置。所有的库等都是原始工作映像的一部分,与我获取内核源代码的位置相同。

我需要做什么才能完成这项工作? Qt 的某些部分是否与图形驱动程序相关联,这将迫使我重建整个库? galcore.ko和Qt有什么关系?现在我的应用程序和 linux 内核之间是否存在奇怪的依赖关系?!


编辑:PEBCAK。我是个白痴。我没有从正确的 SHA1(配方中列出的)检查 galcore 驱动程序。不过,下面的答案很有启发性,所以我想保留这个问题。

【问题讨论】:

    标签: qt embedded-linux yocto imx6


    【解决方案1】:

    我需要做什么才能完成这项工作?

    不知道。也许您自建的 galcore.ko 与 Freescale 的二进制 blob OpenGL 库不兼容?原来的 galcore.ko 工作正常吗?回溯看起来如何?

    Qt 的某些部分是否与图形驱动程序相关联,会迫使我重建整个库?

    无需重建 Qt。虽然 Qt 与 OpenGL 库链接,但 OpenGL ABI/API 是稳定的,因此不需要重新构建 Qt。除此之外,您不会更改 OpenGL 库。

    galcore.ko和Qt有什么关系?

    Qt 在使用 QtQuick 时使用 OpenGL 进行渲染。 OpenGL 库(libGL.so 和一些变体,如 libGLes2.so)由 Freescale 作为二进制 blob 提供。 OpenGL 库使系统调用最终出现在 galcore.ko 内核模块中。

    libQt5EglDeviceIntegration.so.5 是 Qt 中执行第一个 OpenGL 调用以初始化 OpenGL 的部分。

    现在我的应用程序和 linux 内核之间是否存在奇怪的依赖关系?!

    嗯,是的,间接通过 Qt -> libGL.so -> 内核 [galcore.ko]

    【讨论】:

    • 原始的 galcore(由 yocto 构建)有效。我的内核和 galcore 在 yocto 之外构建但使用相同的工具链不起作用。理论上,这两个版本之间没有区别,除非 Yocto 做了一些我不知道的魔法。这就是我要追查的魔法……
    • 有我的问题。我是个白痴。不过,我接受了这个答案,因为它确实回答了我的直接问题。
    • 很高兴您发现了问题。现在不要让我们悬而未决,您自己的 galcore.ko 和标准的有什么区别?
    • 我不知道。我刚刚意识到这两个文件的大小不同,这是不应该的。然后我检查了我的 Yocto 配方并检查了那里的 SHA1。主人的 HEAD 和那之间的差异很大,所以我认为这是我的问题。我从那时起重建了模块,一切都很好。我实际上并没有在那个驱动程序上工作,所以这对我来说已经足够了。
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 2015-10-20
    • 2011-09-14
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多