嗯,首先,你永远不能通过运行 ${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(请注意,实际命令需要有一个制表符用于缩进)。
然后,您必须/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel/
在 Makefile 或您的 make 调用中将 KERNEL_SRC 定义为 。(使用像 KERNEL_SRC 这样的变量将确保您的模块配方在使用 bitbake 构建时自动选择正确的位置)。
要手动构建内核模块:
- 为您的 SDK 获取 environment-* 文件。
- 转到您的模块目录。
- KERNEL_SRC=/opt/iot-devkit/1.6.1/sysroots/i586-poky-linux/usr/src/kernel LDFLAGS="" make 但是这样会失败,因为找不到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 板上安装它。