当前位置:  开发笔记 > 编程语言 > 正文

linux/module.h:没有这样的文件或目录

如何解决《linux/module.h:没有这样的文件或目录》经验,为你挑选了2个好方法。

我是初学者,我正在尝试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
#include

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.



1> sarnold..:

你试图用普通的模块编译你的模块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



2> duncan..:

安装包kernel-devel:

yum install kernel-devel

在那之后,你应该:

/usr/src/kernels/$kernelversion/include/linux/module.h

然后你可以传递类似的东西:

-I/usr/src/kernels/$(uname -r)/include

到编译器

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有