2

我使用 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 驱动程序。不过,下面的答案很有启发性,所以我想保留这个问题。

4

1 回答 1

2

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

不知道。也许您自建的 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]

于 2018-04-10T16:16:59.923 回答