Module 编译简单内核模块时遇到问题

Module 编译简单内核模块时遇到问题,module,kernel,Module,Kernel,我正在尝试编译一个简单的内核模块。我有一个完全编译的内核,uname-r事实上确认了我正在运行我编译的内核 我有一个小的Makefile来完成这项工作,如下所示: obj-m := exo1_simple_module.o all: make -C /lib/modules/$(uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(uname -r)/build M=$(PWD) clean c文件

我正在尝试编译一个简单的内核模块。我有一个完全编译的内核,uname-r事实上确认了我正在运行我编译的内核

我有一个小的Makefile来完成这项工作,如下所示:

obj-m := exo1_simple_module.o
all:
      make -C /lib/modules/$(uname -r)/build M=$(PWD) modules
clean:
      make -C /lib/modules/$(uname -r)/build M=$(PWD) clean
c文件名为exo1\u simple\u module.c 它位于目录/home/tom/work/kernel\u模块中

当我运行make时,我得到一个错误:

没有规则使/home/tom/work/kernel\u modules/ex01\u simple\u module.c成为/home/tom/work/kernel\u modules/exo1\u simple\u module.o所需的目标'/home/tome/work/kernel\u modules/ex01\u simple\u module

不知何故,我认为有一个开关或命令选项,我应该给gcc,但它缺少了。

为什么这样做

obj-m := exo1_simple_module.o
当示例显示

obj-m += exo1_simple_module.o

我还注意到,您在uname-r

之前删除了shell,您没有编译makefile中的任何地方,您没有参考如何将a.c转换为a.o,并且您的makefile中没有模块部分,因此它将失败p.S。我会对你的帖子进行编辑,使其更清晰易读,但其他人已经对其进行了编辑,因此在他的编辑被批准/拒绝之前,不允许进行其他编辑谢谢你的回复。我见过内核模块的其他Makefiles,但没有关于如何将.c转换为.o的参考资料。obj-m+=hello.o all:make-C/lib/modules/$shell uname-r/build/m=$PWD modules clean:make-C/lib/modules/$shell uname-r/build/m=$PWD clean对不起,我确实尝试过用更好的格式编辑上面的评论,但显然缺乏这样做的信息。看起来你的干净引用是循环的,它指的是它自己,而你的所有引用的是不存在的模块。嗨,以上这些都不重要。我只是简单地将完整路径放在Makefile渲染shell中,这是不必要的,我得到了相同的结果。