im on BSP v1.1 yocto是1.6
我试图设置交叉编译工具链来编译字符驱动程序代码 但我得到的输出是
[mark @ localhost~] $ $ {CC} first.c -o first
first.c:1:24:致命错误:linux / init.h:没有这样的文件或目录
。#包括 ^编译终止。
我认为问题在于此 标题不在工具链中 /opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/include/linux/~ 在这个位置没有
我认为必须添加一些内容作为IMAGE_INSTALL或IMAGE_FEATURE,但我不知道是什么
我正走在正确的轨道上吗? 有谁知道我要添加什么? 还是我完全偏离了轨道?答案 0 :(得分:2)
首先,您可以永远通过在其上运行$ {CC}来构建内核模块。您应该始终使用Makefile,它将大部分工作重定向到内核源Makefil。
为您创建一个Makefile模块,包含类似于:
的内容obj-m += hello-1.o
all:
make -C $(KERNEL_SRC M=$(PWD) modules
clean:
make -C $(KERNEL_SRC) M=$(PWD) clean
取自The Linux Kernel Module Programming Guide的示例(请注意,实际命令需要有缩进的制表符)。
然后,你必须在Makefile或make调用中将KERNEL_SRC定义为/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel/
。 (使用像KERNEL_SRC这样的变量将确保您的模块配方在使用bitbake构建时自动选择正确的位置。)
手动构建内核模块:
现在应该生成hello.ko,你应该能够在Galileo板上进行insmod。