im on BSP v1.1yocto是1.6
我正在尝试建立交叉编译工具链来编译字符驱动程序代码但是我得到的输出是
[mark@localhost~]$${CC}优先.c-o优先
first.c:1:24:致命错误:linux/init.h:没有这样的文件或目录
#包括^编译终止。
我认为问题在于收割台不在工具链中/opt/ot-devkit/1.6.1/sysroots/i586-poky-linux/usr/include/linux/~这个位置没有
我认为必须添加一些东西作为IMAGE_INSTALL或IMAGE_FEATURE,但我不知道是什么
我走对了吗?有人知道我要补充什么吗?还是我完全偏离了轨道?
首先,您可以通过在内核模块上运行${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
示例取自《Linux内核模块编程指南》(注意,实际命令需要有一个用于缩进的制表符)。
然后,您必须在Makefile中或从您的make调用中将KERNEL_SRC定义为/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel/
。(使用KERNEL_SRC这样的变量可以确保在使用bitbake构建时,模块配方会自动选择正确的位置)。
手动构建内核模块:
- 为您的SDK获取环境-*文件
- 转到模块目录
- KERNEL_SRC=/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/SRC/KERNEL LDFLAGS="制造但是,这将失败,因为找不到fixdep。我们将手动修复此问题
- cd/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel
- 制作silentoldconfig脚本
- 返回模块目录
- KERNEL_SRC=/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/SRC/KERNEL LDFLAGS="制造
这应该会产生hello.ko,你应该能够在伽利略板上进行insmod。