内核模块的Makefile输出名称

4

我正在尝试编译我的内核模块。 .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

你试过将 file1.c 重命名为 mod1.c 吗? - mpromonet
2个回答

8

你应该把第一行改成类似这样的内容:

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

在这里,module_name 是模块文件的名称(在本例中输出将是 module_name.ko),它将从 file1.c 构建。您可以在第二行添加多个源文件,例如:

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

在这种情况下,module_name.ko 将由 file1.cfile2.cfile3.c 构建。
如果您想完全理解 Linux 内核 makefile,请阅读此文档。您的问题在大约 190 行左右有所描述。

2
解决方案如下:
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

1
我认为你应该将 fw-objs 更改为 mod1-objs 才能使其正常工作。 - Krzysztof Adamski
@KrzysztofAdamski 已修复。谢谢! - Tomer Amir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接