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