1.版本信息的查看
从这里可以判断出uboot的版本号,这个对应的版本是2016.03
2.是否详细打印
ifeq用来比较两个值是否相等
这里涉及到一个函数origin,origin不操作变量的值,语法为
$(origin)
origin的返回值是变量的来源,那么这里就是变量V的来源,变量V的来源是command line
如过变量V的来源是command line进入ifeq里面,继续执行
我们在编译时候如果要详细打印,会设置V=1来实现完整的命令输出
KBUILD_VERBOSE会获取到V所赋值的
因此有
KBUILD_VERBOSE=1
接下来往下分析,如果没有定义KBUILD_VERBOSE话,会默认KBUILD_VERBOSE=0
接下来如果KBUILD_VERBOSE为的话,quiet和Q都为空,进行详细打印
如果KBUILD_VERBOSE不是1,则
quiet = quiet_
Q = @
Makefile 中会用到变量 quiet 和 Q 来控制编译的时候是否在终端输出完整的命令
.如果Q为@,我们知道在命令前面加上“@”就不会在终端输出命令了
我们截图注释部分
make -s 这个命令实现编译的时候不打印信息 ,什么显示都没得,原理是quiet=silent_。
3.获取主机架构和系统
HOSTARCH是架构,在linux终端我们输入 uname -m,显示架构名称
然后是一个管道运算符,把shell uname -m的屏幕输出结果,作为sed的输入,把其中的i.86替换成x86
4.设置目标架构、交叉编译器和配置文件
编 译 uboot 的 时 候 需 要 设 置 目 标 板 架 构 和 交 叉 编 译 器 ,
make ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf-
就是用于设置 ARCH 和 CROSS_COMPILE,在顶层Makefile 中代码如下:
这里HOSTARCH是开发设备的架构,245行比较了下开发设备的架构和目标开发板的架构
如果两个架构相等了CROSS_COMPILE为空,则不需要交叉编译工具链
如果两个架构不相等,则CROSS_COMPILE为我们所设置的工具链arm-linux-gnueabihf-
每次编译 uboot 的时候都要在 make 命令后面设置ARCH 和 CROSS_COMPILE,使用起来很麻烦,可以直接修改顶层 Makefile,在里面加入 ARCH和 CROSS_COMPILE 的定义
5.make xxx_defconfig的讲解
在编译Uboot之前,使用make xxx_defconfig进行配置
我们先看一下Makefile的源码,看看其中的目标
这里使用了%用来代替省略内容,%config依赖scripts_basic outputmakefile FORCE