linux - 具有多个子目录的 Linux 内核模块的 Makefile

标签 linux makefile linux-kernel

我需要有关内核模块的 Makefile 的帮助。即使是示例也会有很大帮助。

目前我的模块代码在多个目录下。让我们说

<MAIN-DIR> --- l2.c 
    <SUB-DIR1> --- hello.c
    <SUB-DIR2> --- bye.c

对于上述情况,我该如何编写我的 makefile。因为要构建 l2 模块,我需要 l2.o hello.o 和 bye.o。目前它们位于多个目录中。

最佳答案

如果您要从内核树构建模块,那么像下面这样的简单 makefile 应该可以工作:

MODULE_NAME = mymodule

SRC     := foo.c src/bar.c

# Path to target Linux Kernel
KDIR        := $(shell pwd) # <--- Fill in with path to kernel you're compiling against

$(MODULE_NAME)-objs = $(SRC:.c=.o)

obj-m       := $(MODULE_NAME).o
PWD     := $(shell pwd)

EXTRA_CFLAGS := -I$(PWD)/src -I$(PWD)/include

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

正如在 SRC := 行中所见,您只需指定所有源文件的路径,包括子目录中的文件。 KDIR 中的顶级内核 makefile 将负责编译。

有关内核构建系统和树外构建的更多信息,请参阅 Documentation/kbuild/modules.txt 中的内核源文档。

关于linux - 具有多个子目录的 Linux 内核模块的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011787/

相关文章:

linux - 在 RPM CentOS 规范文件中使用自定义配置/制作构建多个源

python - 在 Linux (CentOS) 的 Python 中及时获取负载或获取更短时间段的 getloadavg()

c - 即使使用 pkg-config 也找不到 'gtk/gtk.h' 文件

linux - 如何构建 Linux 内核模块以使其与所有内核版本兼容?

c - 内核模块中的进程描述符

当我们在结构中有一个指针时使用container_of宏

makefile - Makerule 只运行一个规则

linux - 'make' 期间 config.status 错误

c - 使用 Linux AIO 写入 eventfd

linux - 使用变量作为命令的输入