编译错误:找不到文件或目录。

4
我是一名新手内核模块开发者。因此,我从简单的hello world内核模块开始学起。我参考了《Linux内核模块编程指南》这本书(它是针对内核2.6的)。 我使用yum安装了kernel-devel和kernel headers。我正在使用Fedora 17操作系统。 我发现有一个符号链接:

/lib/modules/3.3.4-5.fc17.x86_64/build -> /usr/src/kernels/3.3.4-5.fc17.x86_64

现在,我的工作目录下有一个hello-1.c文件(一个简单的内核模块)和一个Makefile文件。 Makefile文件内容如下:

obj-m += hello-1.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

当我在 $make 进行操作时,出现错误:

make -C /lib/modules/3.3.4-5.fc17.x86_64/build M=/root/kerneldev modules
make: *** /lib/modules/3.3.4-5.fc17.x86_64/build: No such file or directory.  Stop.
make: *** [all] Error 2

我在Centos-5.x上做了同样的程序,它成功运行了,因为/lib/modules/3.3.4-5.fc17.x86_64/build包含了实际的模块(而不是符号链接)。为什么会出现这样的差异?有什么问题吗?


我也使用相同的符号链接在Fedora 17/18上,但我没有任何问题。这是一个有效的符号链接吗?/usr/src/kernels/3.3.4-5.fc17.x86_64是否存在? - Federico
3个回答

1

这条信息

make: *** /lib/modules/3.3.4-5.fc17.x86_64/build: No such file or directory.  Stop.

告诉你在 *** 后的目录路径不存在。当 -C 目录不存在时,make 会报告这个确切格式的错误。其他不存在路径情况将导致更多的单词。例如,如果 /lib/modules/3.3.4-5.fc17.x86_64/build 目录存在但不包含 makefile,则 make 将明确指出没有找到 makefile。因此,其他答案为您提供了帮助,以帮助您创建具有正确内容的该目录。本回答还旨在帮助遇到上述形式的错误消息的人们,对于他们而言,安装 'kernel-devel' 也不能解决问题,通过解释错误信息本身来解决问题。

0

我有一些疑问,比如你在哪里发出make命令。 你当前的目录似乎是

M=/root/kerneldev

请确认你的 hello-1.c 文件是否在 /root/kerneldev 文件夹中。


0

尝试使用"yum install kernel-devel"(安装内核头文件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接