uboot源码编译过程分析(一)

uboot(全称 Universal Boot Loader),一般用来引导启动linux内核。uboot是一个开源项目,其源码目录、编译形式与Linux内核很相似。这里简略分析一下uboot的编译过程。
先下载源码:
http://ftp.denx.de/pub/u-boot/
在这里插入图片描述
小编下载 u-boot-2011.09.tar.bz2是因为曾经使用过相关的定制版本(针对具体的开发板),并且研究过相关带代码,比较熟悉。
在linux环境下解压:在这里插入图片描述
先看看目录下的README内容:在这里插入图片描述
上面给了一个例子,make <目标配置>,至于目标配置是和硬件体系相关,目前uboot只提供了一些通用常见配置,如果是针对特定的平台,那么所要做的工作就是移植uboot到特定平台,编写与平台相关的部分代码,现在先以uboot提供的配置了解整个编译过程,只有先了解编译过程才谈的上移植。
在当前目录查找符号"TQM823L",会发现文件boards.cfg是与特定平台相关的描述: 在这里插入图片描述在这里插入图片描述
可以看到,TQM823L是powerpc架构,由于宿主机机上只有arm交叉编译链,所以选择arm架构的(am3517_evm)配置如下:在这里插入图片描述
执行如下命令:
make O=am3517_evm CROSS_COMPILE=arm-arago-linux-gnueabi- am3517_evm
宿主机上的交叉编译链是arm-arago-linux-gnueabi- gcc,根据自己的环境设置。
这样会在当前目录下生成am3517_evm目录,并且该目录下有生成的二进制文件以及数据:在这里插入图片描述
现在来看看Makefile中做了哪些相关的操作:在这里插入图片描述
在上图中的注释可以看到,执行指令 mkconfig -A am3517_evm,mkconfig也是当前目录下的脚本,主要部分内容如下:在这里插入图片描述
基本上是在根据字符串am3517_evm在boards.cfg中提取相关信息:在这里插入图片描述
最终:
arch=“arm”
cpu=“arm”
board=“am3517evm”
vendor=“logicpd”
soc="omap3"

最后在include目录下创建两个文件config.mk以及config.h
在这里插入图片描述在这里插入图片描述

include/config.mk内容如下:
在这里插入图片描述
include/config.h内容如下:在这里插入图片描述
至此,mkconfig文件分析完毕,返回到之前的Makefile文件处:在这里插入图片描述
将boards.cfg中的第一列提取出来,然后稍作处理生成.board.depend文件,内容如下:在这里插入图片描述
针对特定硬件平台设定相关参数以及生成相关参数之后会进行执行make,此时默认目标文件为all:在这里插入图片描述
红线标识部分是关于之前在mkconfig里生成的include/config.mk文件是否存在,当然是存在的,所以默认目标all,按照依赖文件去仔细分析就可以找到相应的源码文件:在这里插入图片描述
继续往下,又可以看到另一个all,这次是生成具体的中间文件以及最终的二进制文件:
在这里插入图片描述在这里插入图片描述 至此,我们知道了u-boot的依赖项,整个uboot的编译过程就完成了,下节关注u-boot生成细节部分。