uboot源码编译过程分析(一)
uboot(全称 Universal Boot Loader),一般用来引导启动linux内核。uboot是一个开源项目,其源码目录、编译形式与Linux内核很相似。这里简略分析一下uboot的编译过程。 先下载源码: 小编下载 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