Linux 英特尔伽利略将内核头文件添加到交叉编译工具链

Linux 英特尔伽利略将内核头文件添加到交叉编译工具链,linux,kernel,yocto,toolchain,intel-galileo,Linux,Kernel,Yocto,Toolchain,Intel Galileo,BSP v1.1上的im yocto为1.6 我正在尝试设置交叉编译工具链来编译字符驱动程序代码 但我得到的结果是 [mark@localhost~]$${CC}first.c-o first first.c:1:24:致命错误:linux/init.h:没有这样的文件或目录 .#包括 ^编译终止 我认为问题在于 收割台不在工具链中 /opt/iot devkit/1.6.1/sysroot/i586-poky-linux/usr/include/linux/~ 在这个位置没有任何标记 我认为必

BSP v1.1上的im yocto为1.6

我正在尝试设置交叉编译工具链来编译字符驱动程序代码 但我得到的结果是

[mark@localhost~]$${CC}first.c-o first

first.c:1:24:致命错误:linux/init.h:没有这样的文件或目录

.#包括 ^编译终止

我认为问题在于 收割台不在工具链中 /opt/iot devkit/1.6.1/sysroot/i586-poky-linux/usr/include/linux/~ 在这个位置没有任何标记

我认为必须添加一些东西作为镜像安装或镜像功能,但我不知道是什么

我走对了吗? 有人知道我要补充什么吗?
还是说我完全偏离了轨道?

首先,您永远不可能只在内核模块上运行${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
示例取自(请注意,实际命令需要有用于缩进的制表符)

然后,您必须在Makefile中或通过make调用将KERNEL_SRC定义为
/opt/iot devkit/1.6.1/sysroot/i586 poky linux/usr/SRC/KERNEL/
。(使用诸如KERNEL_SRC之类的变量将确保您的模块配方在使用bitbake构建时自动选择正确的位置)

要手动构建内核模块,请执行以下操作:

  • 源环境-*文件为您的SDK
  • 转到你的模块目录
  • KERNEL_SRC=/opt/iot devkit/1.6.1/sysroot/i586-poky-linux/usr/SRC/KERNEL LDFLAGS=”“make 但是,这将失败,因为找不到fixdep。我们将手动修复此问题
  • cd/opt/iot devkit/1.6.1/sysroot/i586-poky-linux/usr/src/kernel
  • 生成silentoldconfig脚本
  • 返回模块目录
  • KERNEL_SRC=/opt/iot devkit/1.6.1/sysroot/i586-poky-linux/usr/SRC/KERNEL LDFLAGS=”“make

  • 现在应该会生成hello.ko,您应该能够在Galileo板上insmod。

    当我执行第7步时。我返回CC[M]/home/mark/GalileoDriver/hello-1.o构建模块,第2阶段。MODPOST 1 modules/bin/sh:scripts/mod/MODPOST:没有这样的文件或目录make[2]:***[\uu MODPOST]错误127 make[1]:***[modules]错误2 make[1]:离开目录
    /opt/iot devkit/1.6.1/sysroots/i586 poky linux/usr/src/kernel'make:**[all]错误2
    有什么建议吗?步骤5行吗
    scripts/mod/modpost
    应该在那时创建,例如
    scripts/basic/fixdep
    。老实说,我一直在按enter键,我会再次运行吗?我还有一个问题,如果你能帮我,尽管问。也许这应该是个新问题?另一种可能是加入Yocto项目的邮件列表。