gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:51:57 25 4
gpt4 key购买 nike

我是一个初学者,我正在尝试一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com