Linux内核(2)-Makefile详解,必须要掌握的编译参数

本文详细解释了LinuxMakefile中的关键变量如VERSION、MAKEFLAGS、makeV、make-s、makeO、makeC、makeM等的用法,涉及架构设置、编译器选择、头文件路径以及zImage、uImage的生成过程。
摘要由CSDN通过智能技术生成

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_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)

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
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_启用静默输出

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_CHECKSRC
    KBUILD_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值