我正在使用 Ubuntu 12.04。我编写了一个简单的 hello world 内核模块(hello.c
)。我为其编写了以下 makefile:
obj-m+=hello.o
KDIR:= /usr/src/linux-headers-3.2.0-24-generic-pae
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.* *.symvers *.order
但是当我从内核进行 make 时出现了这个错误:
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-24-generic-pae'
make[2]: *** No rule to make target `arch/x86/tools/relocs.c', needed
by `arch/x86/tools/relocs'. Stop.
hello.c
并makefile
在/Documents/module_prog
。我make
从该目录运行。
是什么原因导致了此错误?我该如何修复它?
答案1
在 make 文件中,只需更改SUBDIRS=$(PWD)
为M=$(shell pwd)
...
效果很好
答案2
所需的 i386 标头:
sudo apt-get install linux-headers-$(uname -r | sed 's/\(.*\)-[a-z]*/\1/'):i386
例子:
sudo apt-get install linux-headers-5.4.0-42:i386
答案3
获取特定内核的头文件...使用稍微不那么聪明的@Thantelius 答案版本可能会更成功:
apt search linux-headers-$(uname -r)
apt install <package name showing in the search>
然而在大多数最新/主要的发行版中,应该默认安装标头
答案4
遇到这个问题很长时间后,我的解决方案是将 makefile 从 重命名makefile
为Makefile
。