UBOOT——①顶层Makefile分析
一、通识
1、版本号
VERSION = 2016 //主版本号
PATCHLEVEL = 03 //补丁版本号
SUBLEVEL = //次版本号
EXTRAVERSION = //附加版本信息
NAME = //名字有关的,一般不使用这两个
2、 MAKEFLAGS 变量
export VARIABLE //导出变量给子 make
unexport VARIABLE //不导出变量给子 make
MAKEFLAGS += -rR --include-dir=$(CURDIR)
MAKEFLAGS /SHELL 值始终自动的传递给子make 除非使用“unexport”声明
-rR : 表示禁止使用内置的隐含规则和变量定义
--include-dir : 指明搜索路径
$(CURDIR): 表示当前目录
3、编译选项
V=1 来实现完整的命令输出
O=out 指定输出目录
C = 1 使能代码检查
M=dir 单独编译某个模块
HOSTARCH 主机架构
HOSTOS 系统
ARCH 架构 //ARCH = arm
CROSS_COMPILE 交叉编译工具 //arm-linux-gnueabihf- (只到 “ - ”)
CC = $(CROSS_COMPILE)gcc //CC 为编译gcc的简短语法
4、常用变量
ARCH = arm
CPU = armv7
BOARD = mx6ullevk
VENDOR = freescale
SOC = mx6
CPUDIR = arch/arm/cpu/armv7
BOARDDIR = freescale/mx6ullevk
ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
这几个变量定义自config.mk
config.mk:
ARCH := $(CONFIG_SYS_ARCH:"%"=%)
CPU := $(CONFIG_SYS_CPU:"%"=%) //"%"=% 取双引号里面的值
.....
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
CONFIG_SYS_XXX
定义自 .config
文件
定义为: CONFIG_SYS_ARCH = “arm”
.config
由 make xxxx_defconfig
生成
二、 make xxx_defconfig 过程——生成.config
流程图:
详细参考正点原子linux驱动开发指南
使用conf程序去生成.config 另一种旧版使用mkconfig 去生成config.mk 、config.h
三、make过程——生成 u-boot.bin
u-boot.lds 为链接脚本,将 arch/arm/cpu/armv7/start.o 和各个子目录
下的 built-in.o 链接在一起生成 u-boot
总结
make xxx_defconfig:用于配置 uboot,这个命令最主要的目的就是生成.config 文件。
make:用于编译 uboot,这个命令的主要工作就是生成二进制的 u-boot.bin 文件和其他的一些与 uboot 有关的文件,比如 u-boot.imx 等等。