首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

u-boot2010.03 配备编译目标分析

2012-09-07 
u-boot2010.03 配置编译目标分析该系列教程会根据uboot的编译过程进程分析,如何编译,那么将会如何分析这些

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

完成.接着就是编译了.下次见~~

热点排行