【问题标题】:Make/build multiple kernel modules in different sub directories在不同的子目录中制作/构建多个内核模块
【发布时间】:2017-03-17 21:56:14
【问题描述】:

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

我有以下目录和文件:

  • 顶级目录:
    • 子目录0:
      • module0.c
      • 生成文件
    • 子目录1:
      • module1.c
      • 生成文件
    • 子目录2:
      • module2.c
      • 生成文件
    • 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

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

谢谢, 米查

【问题讨论】:

  • 使顶级Makefile类似,但使用obj-y += subdir0/
  • 谢谢,我试试看;)
  • @0andriy 这正是我想要的,非常感谢。如果你写这个作为答案,我已经接受了:)

标签: c linux makefile linux-kernel kernel-module


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2012-11-16
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多