Make/build 不同子目录中的多个内核模块

Make/build multiple kernel modules in different sub directories

我想通过执行一个 Makefile 来制作多个内核模块。

我有以下目录和文件:

我只想执行顶层目录中的Makefile,应该执行所有子目录的Makefile。我想为每个子目录获取一个内核模块。

这是我当前的设置,但它不起作用。如果我在子目录中执行 make,它会构建正确的 *.ko 文件。但是,如果我执行顶级 Makefile,它只会生成 Module.symvers 和 modules.order,并且输出看起来像每个 Makefile 都会被执行,但在子目录中没有创建任何内容。

我的顶级 Makefile 包含以下内容:

TARGETS := all clean
SUBDIRS := subdir0 subdir1 subdir2

.PHONY: $(TARGETS) $(SUBDIRS)

$(TARGETS): $(SUBDIRS)

$(SUBDIRS):
    $(MAKE) -C $@ $(MAKECMDGOALS)

我的子目录 Makefiles 有以下代码:

obj-m += module0.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

如果有人能帮助我,我会很高兴。

谢谢, 米哈

正如@0andriy 所说,我必须使用类似于子目录 Makefiles 的 Makefile。但是我没有添加 obj-m 条目,而是将所有子目录添加到 obj-y。