uboot - 配置过程

来源:互联网 发布:工程软件工作量估计 编辑:程序博客网 时间:2024/06/01 09:58

===分析uboot的配置过程(mkconfig脚本)===

uboot怎么配置?我们在终端上执行make NAME_config时的运行过程解析!


我们执行make x210_sd_config时会运行makefile的这两行程序,先分析下

第二行:echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

就是讲链接地址写入到 $(obj)board/samsung/x210/config.mk文件中。@是静默编译

其实有些板子的配置第二行时也可以这样做,进入 $(obj)board/samsung/x210/文件夹

手工创建 config.mk文件 写入TEXT_BASE = 0xc3e00000。


接着我们来分析第一行命令,这个其实就是运行uboot根目录下的mkconfig文件,

并传入6个参数:$(@:_config=) arm s5pc11x x210 samsung s5pc110

$1:$(@:_config=) :去掉目标x210_sd_config中的_config字符串也就是 x210_sd

$2:arm

$3:s5pc11x

$4:x210

$5:samsung

$6:s5pc110

然后开始运行mkconfig····


以上这段shell脚本主要的功能是打印板子的名字

echo "Configuring for ${BOARD_NAME} board..."  ${BOARD_NAME} = $1 = x210_sd

所以在配置是会打印出 Configuring for x210_sd board...  如图:


继续看脚本,下面的的工作主要是创建符号链接:


## Create link to architecture specific headers#if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asmelse
#我们是默认编译运行这里
#创建符号链接1:arm -> asm-armcd ./includerm -f asmln -s asm-$2 asmfirm -f asm-$2/archif [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/archelse
#创建符号链接“2”(后面会被删除 所以这个不算):
#asm-arm/arch -> arch-s5pc110
ln -s ${LNPREFIX}arch-$6 asm-$2/archfi

#不执行
# create link for s3c24xx SoCif [ "$3" = "s3c24xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/archfi
#不执行
# create link for s3c64xx SoCif [ "$3" = "s3c64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/archfi
#不执行
# create link for s5pc1xx SoCif [ "$3" = "s5pc1xx" ] ; then rm -f regs.h ln -s $6.h regs.h rm -f asm-$2/arch ln -s arch-$3 asm-$2/archfi# create link for s5pc11x SoCif [ "$3" = "s5pc11x" ] ; then
#创建符号链接2:regs.h -> s5pc110.h
rm -f regs.h ln -s $6.h regs.h
#删除上面创建的链接“2” 创建下面新的(算打补丁吧 不直接该上面的)
#创建符号链接3:asm-arm/arch -> arch-s5pc11x
rm -f asm-$2/arch ln -s arch-$3 asm-$2/archfi
#不执行
# create link for s5p64xx SoCif [ "$3" = "s5p64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/archfi
#不执行
# create link for s5p644x SoCif [ "$3" = "s5p644x" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/archfiif [ "$2" = "arm" ] ; then
#创建符号链接4:asm-arm/proc ->proc-armv
rm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/procfi# create link for s3c64xx-mp SoCif [ "$3" = "s3c64xx-mp" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/archfi

SO!!为虾米要创建这些符号链接呢??

因为为了移植不同的开发板SOC,比如源码中你在#include<asm/xxx.h>时,

其实兼容了所以版本板子的asm-soc/xxx.h  不是吗~~~


最后分析最后一段的shell脚本:(主要是生成include/config.mk文件和生成配置头文件include/config.h)


注意:此时的路径是在include下,所以上面生成的config.mk和config.h是在include下的:

config.mk的生成:

生成目的:在主makefile中要调用它。

生成内容:如下图:

config.h的生成:

生成目的:其实是为了更好的移植性,和上面做的符号链接类似:(config.h就是为了包含$1.h )

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

生成内容:如下图:


<configs/x210_sd.h>,这个头文件是我们移植x210开发板时,对开发板的宏定义配置文件。

这个文件是我们移植x210时最主要的文件。
x210_sd.h文件会被用来生成一个autoconf.mk文件,这个文件会被主Makefile引入,指导整

个编译过程。这里面的这些宏定义会影响我们对uboot中大部分.c文件中一些条件编译的选择。

从而实现最终的可移植性。


0 0
原创粉丝点击