我正在遵循 Hello World LKM 的第一个示例,现在我需要编译它。
根据书上的说法,Makefile需要像这样:
obj-m+=hello_world.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
(并且它说您不能运行sudo make
,否则您将重新编译所有 Linux 内核头)。
运行此程序后输出:
make -C /lib/modules/5.10.63+/build/ M= modules
make[1]: Entering directory '/usr/src/rpi-5.10.y'
/bin/sh: 1: cannot create include/generated/uapi/linux/.version.h.tmp: Permission denied
UPD include/generated/uapi/linux/version.h
mv: cannot stat 'include/generated/uapi/linux/.version.h.tmp': No such file or directory
make[1]: *** [Makefile:1277: include/generated/uapi/linux/version.h] Error 1
make[1]: Leaving directory '/usr/src/rpi-5.10.y'
make: *** [Makefile:4: all] Error 2
如果我运行sudo make
或更改 Makefile 命令,sudo make -C ...
它就永远不会结束(>2 小时并且仍在等待)。
我无法运行sudo apt install linux-headers-'uname -r'
(忽略',它们是'但我不能把它放在这里)因为内核是最后一个(5.10.63+),但我已按照书中介绍如何手动编译所有 Linux 内核头文件的所有步骤进行操作,所以我应该拥有它们。
有什么想法吗?如果您需要一些额外的信息,只需告诉我需要运行什么命令,我就会附上输出。
谢谢!