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

cod*_*eak 3 linux makefile linux-kernel

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

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

<MAIN-DIR> --- l2.c 
    <SUB-DIR1> --- hello.c
    <SUB-DIR2> --- bye.c
Run Code Online (Sandbox Code Playgroud)

对于上面的场景,我如何编写我的makefile.因为构建l2模块我需要l2.o hello.o和bye.o. 目前他们在多个目录中.

Aus*_*ips 5

如果您正在构建内核树之外的模块,那么下面的简单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
Run Code Online (Sandbox Code Playgroud)

从该SRC :=行中可以看出,您可以简单地指定所有源文件的路径,包括子目录中的源文件.顶级内核makefile KDIR将负责编译.

有关内核构建系统和树构建之外的更多信息可以在内核源代码文档中找到Documentation/kbuild/modules.txt.