1.版本号
VERSION = 4
PATCHLEVEL = 1
SUBLEVEL = 15
2.MAKEFLAGS变量
MAKEFLAGS += -rR --include-dir=$(CURDIR)
包含当前目录及所有递归子目录
3.make V=1编译输出
make V=1 输出编译完整命令
ifeq ("$(origin V)", "command line")KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSEKBUILD_VERBOSE = 0
endififeq ($(KBUILD_VERBOSE),1)quiet =Q =
elsequiet=quiet_Q = @
endif
origin V:查看变量V的来源,如果来源于command line,且KBUILD_VERBOSE 赋值为V的值,如果V=1 则quiet=quiet_和Q=@。
在Makefile中,如果命令前用@,则代表不将命令内容输出,例如@rm -rf $(output)
4.make -s 静默输出
make -s 实现静默编译
ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)quiet=silent_
endif
else # make-3.8x
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)quiet=silent_
endif
endifexport quiet Q KBUILD_VERBOSE
%:通配符,匹配任何字符
filter:从MAKE_VERSION变量中匹配指定的格式,例如 ( f i l t e r s (filter s% -s%, (filters(MAKEFLAGS)),就是匹配MAKEFLAGS中的s或者-s开头的字符串,如果匹配到的结果不为空,则quiet=silent_启用静默输出
5.make O=output 设置编译输出目录
make O=output 指定编译产生文件输出到指定目录
ifeq ("$(origin O)", "command line")KBUILD_OUTPUT := $(O)
endif
O的来源于 command line,则KBUILD_OUTPUT赋值为变量O的值
6.make C=1使能代码检查
ifeq ("$(origin C)", "command line")KBUILD_CHECKSRC = $(C)
endif
ifndef KBUILD_CHECKSRCKBUILD_CHECKSRC = 0
endif
7.make M=dir 模块编译
ifeq ("$(origin M)", "command line")KBUILD_EXTMOD := $(M)
endif
8.设置架构和编译器
ARCH ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
9.交叉编译工具变量设置
AS = $(CROSS_COMPILE)as
CC = $(CROSS_COMPILE)gcc
#类似如上
10.头文件路径变量
顶层 Makefile 定义了两个变量保存头文件路径:USERINCLUDE 和 LINUXINCLUDE
11.导出变量
顶层Makefile导出子变量给其他Makefile使用
12.生成zImage过程
vmlinux:未压缩的原始内核文件,大约16MB
Image:objcopy拷贝vmlinux,并去除符号表等信息,大约12MB
zImage:Image使用gzip压缩,大约6MB
uImage:老版本uboot专用的镜像文件,包含一些头信息
最常用的为zImag