我是内核模块开发的新手。所以我从简单的hello world内核模块开始我正在使用《 Linux内核模块编程指南》这本书作为参考(它针对的是内核2.6)。我用yum安装了kernel-devel和kenel标头。我正在使用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包含实际的模块(不是符号链接)。应该是什么问题?为什么会有这种差异?
我几乎没有疑问,例如您在哪里发出make命令。您当前的目录似乎是
M=/root/kerneldev
您的hello-1.c是否在/root/kerneldev
文件夹中。
尝试“ yum install kernel-devel”(用于内核头文件)
消息
make: *** /lib/modules/3.3.4-5.fc17.x86_64/build: No such file or directory. Stop.
告诉您***之后的目录路径不存在。当Make
目录不存在时,-C
会发出此错误的确切格式。其他不存在的路径情况将导致更多的单词。例如,如果/lib/modules/3.3.4-5.fc17.x86_64/build
目录确实存在,但其中不包含任何Makefile,则make
将专门说no makefile found
。
因此,其他答案也为您提供了一些帮助,以帮助您创建具有正确目录的目录。
并且此答案还旨在通过解释该消息本身来帮助具有上述错误消息形式并且对于安装'kernel-devel'不会有帮助的人们。