内核模块 makefile 输出名称

Kernel module makefile output name

我正在尝试编译我的内核模块。 .c 文件名为 file1.c,但我需要 .ko 文件名为 mod1.ko.

我该怎么做?

我当前的 makefile:

obj-m := mod1.o
KDIR :=/lib/modules/$(shell uname -r)/build
PDW := $(shell pwd)

all:
    $(MAKE) -C $(KDIR) M=$(PDW) modules

clean:
    $(MAKE) -C $(KDIR) M=$(PDW) clean

您应该将第一行更改为如下内容:

obj-m += module_name.o
module_name-y := file1.o

其中 module_name 是模块文件名(在此示例中,输出将为 module_name.ko),它将从 file1.c 构建。您可以在第 2 行添加多个源文件,因此可以是:

module_name-y := file1.o file2.o file3.o

在这种情况下,module_name.ko 将从 file1.cfile2.cfile3.c 构建。

如果您想完全理解 Linux 内核 makefile,您应该阅读 this document。您的问题在第 190 行附近的某处进行了描述。

解决方案如下所示:

obj-m += mod1.o
mod1-objs := file1.o

KBUILD_CPPFLAGS += -I$(PWD)/

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

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