因此,我尝试按照简单的示例加载O'Rielly Linux设备驱动程序手册中的“ Hello World”设备驱动程序。问题是,由于某种原因,除非我在include语句中显式定义头文件的路径,否则它将无法正常工作。即我必须输入#include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>而不只是#include </linux/init.h>
这是我的makefile
obj-m := hello.o
KDIR =/usr/src/kernels/3.19.8-100.fc20.i686+PAE/include
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
除非明确定义为#include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>我不想这样做,否则它在所有头文件上都返回找不到错误。
谢谢你的帮助。
万一它对任何人都有帮助,如果我保留显式include语句然后进行编译,则产生的hello.mod.c文件如下。
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
MODULE_INFO(vermagic, VERMAGIC_STRING);
__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
使用insmod可以很好地加载。
凤凰求蛊
萧十郎