3

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

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

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

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

4

1 回答 1

6

如果你从内核树中构建一个模块,一个像下面这样的简单的 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 :=,您只需指定所有源文件的路径,包括子目录中的路径。顶层内核 makefileKDIR将负责编译。

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

于 2013-02-22T01:00:16.627 回答