2021SC@SUDSC
Linux内核的根Makefile的导出变量解析
根Makefile也就是Kernel Makefile,其位于Linux内核源代码的顶层目录,主要用于指定编译Linux kernel目标文件和模块的路径。它是根据.config 文件来决定哪些文件被编译进内核。
VERSION = 5
PATCHLEVEL = 14
SUBLEVEL = 11
EXTRAVERSION =
NAME = Opossums on Parade
Kernel Makefile从这额变量的定义开始,这些变量说明了当前内核的版本,并使用于很多地方。比如赋值给KERNELVERSION:
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
其中export是将这些变量传给子目录下的Makefile文件。
接下来就会出现很多ifeq的条件判断语句,主要是检查传递给make 的参数。Kernel Makefile提供了一个特殊的编译选项make help,这个选项会生成可用目标和一些能在命令行传给make的参数。比如:
make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build
make V=2 [targets] 2 => give reason for rebuild of target
make O=dir [targets] Locate all output files in "dir", including .config
make C=1 [targets] Check re-compiled c source with $CHECK
(sparse by default)
make C=2 [targets] Force check of all c source with $CHECK
make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections
make W=n [targets] Enable extra build checks, n=1,2,3 where
1: warnings which may be relevant and do not occur too often
2: warnings which occur quite often but may still be relevant
3: more obscure warnings, can most likely be ignored
Multiple levels can be combined with W=12 or W=123
举个简单的例子就是&#