我需要有关内核模块的 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/