linux-kernel - linux/module.h : No such file or directory

标签 linux-kernel kernel

我是一个初学者,我正在尝试一些 Linux 内核编程的基础知识。今天早上,我在 VIM 中打开了 module.h 文件,并在没有保存任何更改的情况下关闭。之后我无法编译我的任何代码。我收到以下错误消息

[root@localhost helloworld]# cc helloworld.c
helloworld.c:1:25: error: linux/module.h: No such file or directory
[root@localhost helloworld]# 

这是一个成功运行到最后一天的示例代码。
#include<linux/module.h>
#include<linux/kernel.h>

int init_module(void)
{
        printk("HELLO WORLD");
        return 0;
}

void cleanup_module(void)
{
        printk("GOODBYE");
}

我搜索了 module.h 文件,如下所示,它确实存在
[root@localhost usr]# find . -name module.h
./src/kernels/2.6.18-194.el5-i686/include/asm-x86_64/module.h
./src/kernels/2.6.18-194.el5-i686/include/asm-i386/module.h
./src/kernels/2.6.18-194.el5-i686/include/linux/module.h
./include/sepol/policydb/module.h
./include/sepol/module.h
./include/kde/kunittest/module.h
[root@localhost usr]# 

请帮帮我。
我在虚拟盒子中使用 CentOS。

最佳答案

你正试图用普通的 gcc 编译你的模块。没有
围绕 kbuild 框架。你可能已经得到了一些工作在
过去使用这种方法,但是尝试保持它是痛苦的可怕的可怕
一个使用除了纯 kbuild Makefile 之外的任何东西的模块方法。我有
浪费了我太多的生命与 kbuild 作斗争,我不希望这样
发生在你身上——拥抱 kbuild 并让它帮助你构建你的模块。请
阅读Documentation/kbuild/modules.txt在编写另一行代码之前。

您需要做的是创建一个 Makefile为您的模块。其内容应
看起来像这样:

ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m  := modulename.o

else
# normal makefile
    KDIR ?= /lib/modules/`uname -r`/build

default:
$(MAKE) -C $(KDIR) M=$$PWD

endif

我知道它比大多数 Makefile 复杂得多你已经习惯了,
但它有双重目的。如果你只是运行 make在你的目录中,它会
重新调用 make从当前运行的内核中使用 kbuild 机制
(假设至少有一个从 /lib/modules/.../build
正确的位置)。

重新调用 make命令 ( $(MAKE) ) 将正确构建您的模块并
为您节省的时间超出您的想象。 (真的。)

保留Documentation/kbuild/modules.txt在您完成这项工作时在您身边。

注:Documentation/kbuild/modules.txt可以在您的 linux 系统上获得 /usr/share/linux-headers-$(uname -r)/Documentation/kbuild/modules.txt

关于linux-kernel - linux/module.h : No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062601/

相关文章:

linux - 访问硬件寄存器中的内存指针

linux-kernel - 内核模块分析器

linux-kernel - 为什么不只是普通文件而不是 initramfs 或 initrd?

linux - 如果在folder1中创建了一些新文件夹,为什么我必须重复输入 "sudo chmod -R 0777 folder1"

c - 为什么我的系统中有这么多版本的头文件?

c - Windows (64) 内核驱动程序和可分页功能

c - 特定地址处的动态结构数组

linux - proc/meminfo 中的 slab 条目是什么?

一个应用程序可以处理N个accept连接并且每个accept使用一个独立的线程吗

linux - 在内核模式和用户模式之间切换时的时间戳计数器 (TSC)