Linux内核驱动程序makefile错误:“'hello.ko'不需要建立目标'hello.mod.o'的规则”]]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核驱动程序makefile错误:“'hello.ko'不需要建立目标'hello.mod.o'的规则”]]相关的知识,希望对你有一定的参考价值。

我正在研究O'Reilly的Linux设备驱动程序中的hello world模块示例。下面是我正在使用的makefile,摘自书中的示例:

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.

ifneq ($(KERNELRELEASE),)
    obj-m := hello.o

# Otherwise, we were called directly from the command
# line, invoke the kernel build system.

else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD :=$(shell pwd)

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

运行make时出现以下错误:

make -C /lib/modules/5.7.1-x86_64/build M=/home/sleepy/code/drivers/hello modules
make[1]: Entering directory '/usr/src/linux-5.7.1'
  MODPOST 1 modules
make[3]: *** No rule to make target '/home/sleepy/code/drivers/hello/hello.mod.o', needed by '/home/sleepy/code/drivers/hello/hello.ko'.  Stop.
make[2]: *** [scripts/Makefile.modpost:95: __modpost] Error 2
make[1]: *** [Makefile:1642: modules] Error 2
make[1]: Leaving directory '/usr/src/linux-5.7.1'
make: *** [Makefile:15: default] Error 2

如何解决此错误?

我正在研究O'Reilly的Linux设备驱动程序中的hello world模块示例。以下是我正在使用的makefile,摘自该书中的示例:#如果定义了KERNELRELEASE,我们就可以......>

答案

我设法使用以下命令获得了完整的版本:

obj-m := hello.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

以上是关于Linux内核驱动程序makefile错误:“'hello.ko'不需要建立目标'hello.mod.o'的规则”]]的主要内容,如果未能解决你的问题,请参考以下文章

linux内核makefile概览

不修改Linux内核文件,直接用makefile编译驱动,是否要先把内核编译一遍?

linux内核模块编译makefile

Linux驱动模块的Makefile分析

linux内核模块编译makefile

centos的linux内核源码下载方法