我有一个内核模块,我已经成功地编译了我的工具链,并安装在映像中。驱动程序加载得很好,并按预期的方式工作。使用驱动程序的用户程序是CLion 2020.1中的一个cmake项目。我将cmake项目设置为指向OEToolchainConfig.cmake,因此所有
#include<foo.h> 都解决了。除了一些内核头之外,其他所有文件都是;例如:
编辑
为了清楚起见,有些linux头文件被解析了。例如:
#include <linux/kernel.h>
#include <linux/module.h>我只是缺少了内核头文件的一个子集.
端编辑
在导航到sysroot工具链/usr/include/linux目录后,我验证了缺失/未解析的内核头实际上不存在。
因此,这里有两个问题: 1)如果缺少所需的内核头,如何成功地针对工具链编译驱动程序& 2)如何在SDK中包含丢失的内核头?
我怀疑第一个问题的答案是,bitbake抢占了主机的内核头文件,在这种情况下,问题1变成了如何防止这种情况发生;不过,只是猜测一下。关于问题2(我的主要问题),在研究了谷歌机器之后,我找到了一些参考资料来补充:
IMAGE_INSTALL += "\
kernel-devsrc \
linux-libc-headers-dev \
python"在我的核心图像-myimage_1.0.bb文件中,但是这似乎并没有添加我所需要的标题。
我所需的头文件实际上已安装到工具链中,但它们安装在源代码下:/usr/src//include/linux
虽然这允许我解决在CLion中设置包含路径的问题,但是否有什么原因不能将这些路径安装到常规的:/usr/ include /linux目录中呢?
发布于 2021-10-27 21:02:51
默认情况下,生成的SDK通常不包括内核头。这与Ubuntu等其他系统非常相似,在Ubuntu中,必须先安装一个单独的包才能对内核进行编译。
通过在kernel-devsrc中添加IMAGE_INSTALL,可以将内核头添加到映像中,而不是SDK。不过,如果您希望能够在运行中的目标上编译和测试模块(这对于加快调试是很好的),这是很方便的。
现在,有了一些上下文,看看这个答案,看看如何在SDK中获得内核头,以及如何实际开始编译。如果你是像我这样的Linux新手,后者就不那么直观了。
https://stackoverflow.com/questions/65220814
复制相似问题