2011-06-21 86 views
2

我已经下载,编译并在我的机器上安装了最新的内核。现在,我正在尝试编写一个内核模块。当我尝试编译它时,出现以下类似错误 - 致命错误:sys/syscall.h:没有这样的文件或目录 致命错误:linux/module.h:没有这样的文件或目录 我试过重写这个makefile包含了来自我最新内核源码的必要目录,但问题仍然存在。如何在编译内核模块源代码时包含标准头文件?

需要您的建议。

+0

向我们展示代码。另外,你不应该在模块中包含标准头文件。 – cnicutar

+1

你有没有读过任何内核模块教程?现代内核带有用于模块的整个构建环境,您应该使用它。 (换句话说:告诉我们你在问这个问题之前得到了什么。)[这个简单的例子](http://tldp.org/LDP/lkmpg/2.4/html/x208.htm)是否适合你? –

+0

你能告诉我们makefile吗? – Fred

回答

0

你的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_initmodule_exit定义。 你有这些东西吗?

1

你不能在内核中使用libc头文件。

此外,你似乎包括syscall.h。系统调用本质上是用户空间调用。内核中不需要系统调用。

虽然include for linux/module.h应该可以工作。你可以给我们你正在使用的Makefile吗?

+0

我的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

相关问题