C 编译内核模块源代码时如何包含标准头文件?
我已经在我的机器上下载、编译并安装了最新的内核。现在,我正在尝试编写一个内核模块。当我尝试编译它时,会出现以下类似类型的错误- 致命错误:sys/syscall.h:没有这样的文件或目录 致命错误:linux/module.h:没有这样的文件或目录 我已经尝试过为此重写makefile,方法是从我最新内核的源代码中包含必要的目录,但问题仍然存在C 编译内核模块源代码时如何包含标准头文件?,c,linux,makefile,kernel-module,C,Linux,Makefile,Kernel Module,我已经在我的机器上下载、编译并安装了最新的内核。现在,我正在尝试编写一个内核模块。当我尝试编译它时,会出现以下类似类型的错误- 致命错误:sys/syscall.h:没有这样的文件或目录 致命错误:linux/module.h:没有这样的文件或目录 我已经尝试过为此重写makefile,方法是从我最新内核的源代码中包含必要的目录,但问题仍然存在 需要你的建议。你的Makefile应该是这样的 hello.ko: hello.c make ARCH=um -C "/home/abhijit/p
需要你的建议。你的
Makefile
应该是这样的
hello.ko: hello.c
make ARCH=um -C "/home/abhijit/play/kernel/linux-2.6" M=`pwd` modules
obj-m:= hello.o
objs:= hello.o
您应该在源文件中定义一个module\u init
和module\u exit
。
你有这些东西吗?你不能在内核中使用libc头 此外,您似乎包括syscall.h。系统调用本质上是用户空间调用。内核中不需要系统调用
不过,include for linux/module.h应该可以工作。您能给我们您正在使用的Makefile吗?给我们看看代码。此外,您不应该在模块中包含标准头文件。您是否阅读过内核模块教程?现代内核为模块提供了一个完整的构建环境,您应该使用它。(换句话说:在询问问题之前向我们展示你得到了什么。)对你有用吗?你能给我们展示一下makefile吗?我的Make文件看起来像这样-[code]obj-m+=file.o all:Make-C/lib/modules/$(shell uname-r)/build m=$(PWD)modules clean:Make-C/lib/modules/$(shell uname-r)/build m=$(PWD)很好,在一个内核模块教程中,有人建议我包含这些头文件。我是这个领域的新手,因此使用了任何建议。我的Make文件看起来像这样-obj-m+=file.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在一个内核模块教程中,有人建议我包括这些头文件。我是这个领域的新手,因此使用了所有建议。