英特尔伽利略将内核 header 文件添加到交叉编译工具链
Intel Galileo adding kernel header files to the cross compile toolchain
我在 BSP v1.1 上
yocto 是 1.6
我正在尝试设置交叉编译工具链来编译字符 driver 代码
但我得到的输出是
[mark@localhost ~]$ ${CC} first.c -o 第一个
first.c:1:24: fatal error: linux/init.h: No such file or directory
.#include
^ compilation terminated.
我认为问题在于
header 不在工具链中
/opt/iot-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
示例取自The Linux Kernel Module Programming Guide(注意实际命令需要有制表符缩进)。
然后您必须将 KERNEL_SRC 定义为 /opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel/
,或者在 Makefile 中,或者从您的 make 调用中。 (使用像 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="" make
现在应该生成 hello.ko,您应该可以在 Galileo 开发板上进行 insmod。
我在 BSP v1.1 上 yocto 是 1.6
我正在尝试设置交叉编译工具链来编译字符 driver 代码 但我得到的输出是
[mark@localhost ~]$ ${CC} first.c -o 第一个
first.c:1:24: fatal error: linux/init.h: No such file or directory
.#include ^ compilation terminated.
我认为问题在于 header 不在工具链中 /opt/iot-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
示例取自The Linux Kernel Module Programming Guide(注意实际命令需要有制表符缩进)。
然后您必须将 KERNEL_SRC 定义为 /opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel/
,或者在 Makefile 中,或者从您的 make 调用中。 (使用像 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="" make
现在应该生成 hello.ko,您应该可以在 Galileo 开发板上进行 insmod。