编译内核模块时提示No rule to make target 'Home' Stop错误如何解决?
报错原因
- 首要原因:内核模块源码所在的绝对路径包含空格,例如路径为
/home/xxx/Home 代码/hello时,make执行时会按空格拆分路径参数,将拆分出的Home识别为待编译的目标,找不到对应规则就会抛出你遇到的报错。 - 次要排查点:
all、clean目标下的行首缩进用了空格而非Tab,或者未安装对应版本的内核头文件。
修复方案
- 优先调整源码存放路径,将源码移动到无空格、无中文等特殊字符的目录下,例如
/home/xxx/modules/hello,重新执行编译即可解决90%以上的该类报错。 - 确认Makefile语法正确,修正后的标准内核模块Makefile如下,注意
all、clean下方的行首缩进必须是Tab字符,不能用多个空格代替:
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
- 若调整路径后仍报错,安装对应内核的开发头文件:
- Debian/Ubuntu 系发行版执行:
sudo apt install linux-headers-$(uname -r) - RHEL/CentOS/Fedora 系发行版执行:
sudo dnf install kernel-devel-$(uname -r)
- Debian/Ubuntu 系发行版执行:
内容的提问来源于stack exchange,提问作者Ash Hollow
相关产品推荐
相关产品推荐

