参考文档
https://www.kernel.org/doc/html/latest/kbuild/modules.html
https://linux.cn/article-11227-1.html
概要
内核源码树之外的模块称为外部模块。
外部模块的Makefile文件由两部分组成:
1:传给kbuild system的部分
2:传给GNU make程序的部分即normal makefile。
如下所示:
--> filename: Makefile
ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o
else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KDIR) M=$$PWD
# Module specific targets
genbin:
echo "X" > 8123_bin.o_shipped
endif
把包含kbuild system部分的Mankefile文件称为 kbuild Makefile。内核子目录里包含的Makefiles基本都是kbuild Makfile。
如果kbuild Makfile文件比较大时,我们可以把此文件拆分成kbuild文件和Makefile文件。kbuild system首先查找kbuild文件,
只有在未找到时才会去查找makefile文件。也就是说makefile文件和kbuild文件同时存在时,kbuild system只会查找kbuild文件。