u-boot2010.03 配置编译目标分析
该系列教程会根据uboot的编译过程进程分析,如何编译,那么将会如何分析这些流程
此处我还没有增加6410的支持,先看6400 的过程,因为还没有到增加的地方,分析完整个流程之后,会写如何移植uboot到s3c6410的。知道了工作的流程,再去移植会事半功倍的。
拿到uboot首先会修改编译的目标:
make smdk6400_config对执行如下的目标
## Create link to architecture specific headers#/* 这里表示目标目录跟源码目录不一致,建立相应的目录,由于我没有指定目标目录,所以执行else部分 */if [ "$SRCTREE" != "$OBJTREE" ] ; then mkdir -p ${OBJTREE}/include mkdir -p ${OBJTREE}/include2 cd ${OBJTREE}/include2 rm -f asm ln -s ${SRCTREE}/include/asm-$2 asm LNPREFIX="../../include2/asm/" cd ../include rm -rf asm-$2 rm -f asm mkdir asm-$2 ln -s asm-$2 asmelse cd ./include /* 删除asm目录 */ rm -f asm /* * 建立asm指向对应的目录,根据我上面标的,$2就是 2:Architecture = arm * 所以这里就是 ln -s asm-arm asm */ ln -s asm-$2 asmfi/** 这里开始建立arch目录,有了上面的asm目录建立,这里就简单多了* 删除 rm -f asm-arm/arch*/rm -f asm-$2/archif [ -z "$6" -o "$6" = "NULL" ] ; then ln -s ${LNPREFIX}arch-$3 asm-$2/archelse /* * ln -s arch-s3c64xx asm-arm/arch */ ln -s ${LNPREFIX}arch-$6 asm-$2/archfi/* 如果是arm平台,需要多建立一个proc目录 */if [ "$2" = "arm" ] ; then rm -f asm-$2/proc ln -s ${LNPREFIX}proc-armv asm-$2/procfi## Create include file for Make#/** 这里为make编译的时候创建一些环境变量,写入到config.mk文件*/echo "ARCH = $2" > config.mkecho "CPU = $3" >> config.mkecho "BOARD = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk# Assign board directory to BOARDIR variableif [ -z "$5" -o "$5" = "NULL" ] ; then BOARDDIR=$4else BOARDDIR=$5/$4fi## Create board specific header file#/** 开始创建特殊的头文件,被好多文件加载的* APPEND = no,于是创建了新的config.h*/if [ "$APPEND" = "yes" ]# Append to existing config filethen echo >> config.helse > config.h # Create new config filefi/* 写入如下信息到该新建的头文件内 */echo "/* Automatically generated - do not edit */" >>config.hfor i in ${TARGETS} ; do echo "#define CONFIG_MK_${i} 1" >>config.h ;donecat << EOF >> config.h#define CONFIG_BOARDDIR board/$BOARDDIR#include <config_defaults.h>/* 这里需要注意的是,$1 对应的是smdk6400 正好指定了 include/config/smdk6400.h 配置头文件,也就是为什么移植需要该这个头文件,否则找不到的原因 */#include <configs/$1.h>#include <asm/config.h>EOFexit 0整个配置过程就结束了。下面进行总结下
1:在Makefile中将RAM_TEXT = 0x57e00000 写入board/samsung/smdk6400/config.tmp 中
这个地址在最终会变成 TEXT_BASE 可以在board/samsung/smdk6400/config.mk 中看到
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\
2:创建软连接到目标生成的工作目录下,不指定就是在uboot的源码目录下
ln -s asm-$2 asm
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
ln -s ${LNPREFIX}proc-armv asm-$2/proc
3:创建config.mk 为编译指定一些变量
echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
4:创建头文件,指向配置的头文件 include/config.h
cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/$1.h>
#include <asm/config.h>
EOF
完成.接着就是编译了.下次见~~