我已经下载,编译并在我的机器上安装了最新的内核。现在,我正在尝试编写一个内核模块。当我尝试编译它时,出现以下类似错误 - 致命错误:sys/syscall.h:没有这样的文件或目录 致命错误:linux/module.h:没有这样的文件或目录 我试过重写这个makefile包含了来自我最新内核源码的必要目录,但问题仍然存在。如何在编译内核模块源代码时包含标准头文件?
需要您的建议。
我已经下载,编译并在我的机器上安装了最新的内核。现在,我正在尝试编写一个内核模块。当我尝试编译它时,出现以下类似错误 - 致命错误:sys/syscall.h:没有这样的文件或目录 致命错误:linux/module.h:没有这样的文件或目录 我试过重写这个makefile包含了来自我最新内核源码的必要目录,但问题仍然存在。如何在编译内核模块源代码时包含标准头文件?
需要您的建议。
你的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_init
和module_exit
定义。 你有这些东西吗?
你不能在内核中使用libc头文件。
此外,你似乎包括syscall.h。系统调用本质上是用户空间调用。内核中不需要系统调用。
虽然include for linux/module.h应该可以工作。你可以给我们你正在使用的Makefile吗?
我的Make文件看起来像这样 - obj-m + = file.o all: make -C/lib/modules/$(shell uname -r)/ build M = $(PWD)模块 clean:在内核模块教程之一中,我被建议包含这些头文件。我们建议使用C/lib/modules/$(shell uname -r)/ build M = $(PWD)clean 。我在这个舞台上是新人,因此使用了任何建议。 – Wrangler
向我们展示代码。另外,你不应该在模块中包含标准头文件。 – cnicutar
你有没有读过任何内核模块教程?现代内核带有用于模块的整个构建环境,您应该使用它。 (换句话说:告诉我们你在问这个问题之前得到了什么。)[这个简单的例子](http://tldp.org/LDP/lkmpg/2.4/html/x208.htm)是否适合你? –
你能告诉我们makefile吗? – Fred