gpt4 book ai didi

c - 简单的ubuntu内核模块make文件错误

转载 作者:行者123 更新时间:2023-12-04 18:42:29 26 4
gpt4 key购买 nike

我正在尝试构建一个非常简单的内核模块,但遇到了这个错误:

make -C /lib/modules/5.16.14-051614-generic/build M=/home/nanyo/Documents   /ProgrammingEnvs/LinuxKernelDriver modules
make[1]: Entering directory '/usr/src/linux-headers-5.16.14-051614-generic'
make[2]: *** No rule to make target '/home/nanyo/Documents/ProgrammingEnvs/LinuxKernelDriver/hi.o', needed by '/home/nanyo/Documents/ProgrammingEnvs/LinuxKernelDriver/hi.mod'. Stop.
make[1]: *** [Makefile:1852: /home/nanyo/Documents/ProgrammingEnvs/LinuxKernelDriver] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.16.14-051614-generic'
make: *** [Makefile:4: all] Error 2
这是生成文件:
obj-m += hi.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(CURDIR) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(CURDIR) clean
尽管堆栈溢出也有类似的错误,但没有一个具体说 no rule to target '.../name.o' needed by '.../name.mod'我像这样运行 make ~/Documents/ProgrammingEnvs/LinuxKernelDriver$ make .尝试使用 sudo 从其他问题提出的任何解决方案并尝试使用 CURDIR 和 PWD 都没有帮助。
我在 Ubuntu 22.04 jammy 上运行,带有 5.16.14 内核(我必须运行这个内核,因为旧的内核似乎不适用于我最近的硬件)
我已经尝试编译 15 行代码 2 天了,求助! :)

最佳答案

如果你问 make构建一个像 hi.o 这样的目标文件,它将寻找一个源文件来构建目标文件。它不会查找任何随机源文件(如果您有 20 个源文件怎么办?它应该如何确定您的意思是哪一个?),它将根据目标文件的名称查找源文件。
所以如果你想把C代码编译成hi.o , make 将查找名为 hi.c 的源文件.如果要将 C++ 代码编译成 hi.o , make 将寻找像 hi.cpp 这样的源文件.如果要编译 Fortran,make 会查找 hi.f , ETC。
请注意,Linux 系统与 Windows 和 MacOS 不同,使用区分大小写的文件名,因此 hi.c , Hi.c , HI.c等都是不同的文件,而hi.o只会匹配第一个。
如果 make 找不到与目标文件名称相关的源文件,它不会说“好吧,这里只有一个源文件,这一定是他们的意思”。这种任意行为在构建工具中是一件坏事:make 完全按照您的要求执行,如果不能,它不会尝试猜测您的意思。它会给您一个错误,例如没有规则可以将目标设为“hi.o”。
如果您出于某种原因想使用不同的对象和源名称,您可以这样做,但您必须通过编写自己的显式规则来告诉 make:

hi.o : mycoolfile.c
<recipe to build hi.o from mycoolfile.c>
由于内核构建无法知道您可能选择的源文件名,因此您必须在自己的 makefile 中编写这些规则。

关于c - 简单的ubuntu内核模块make文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71628442/

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