【问题标题】:how to include standard header files when compiling a kernel module source?编译内核模块源时如何包含标准头文件?
【发布时间】:2011-06-21 09:28:13
【问题描述】:

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

需要您的建议。

【问题讨论】:

  • 向我们展示代码。此外,您不应在模块中包含标准头文件。
  • 你读过内核模块教程吗?现代内核带有一个完整的模块构建环境,你应该使用它。 (换句话说:在问问题之前告诉我们你得到了什么。)this simple example 对你有用吗?
  • 你能给我们看看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) clean 好吧,在内核模块教程之一中,有人建议我包含这些头文件。我是这个领域的新手,因此使用了任何建议。

标签: c linux makefile kernel-module


【解决方案1】:

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

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

linux/module.h 的包含应该可以工作。你能把你正在使用的 Makefile 给我们吗?

【讨论】:

  • 我的 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 好吧,在内核模块教程之一中,有人建议我包含这些头文件。我是这个领域的新手,因此使用了任何建议。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多