Chinaunix首页 | 论坛 | 博客
  • 博客访问: 660998
  • 博文数量: 81
  • 博客积分: 1659
  • 博客等级: 上尉
  • 技术积分: 1286
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 16:36
个人简介

专注于嵌入式和图像处理

文章分类

全部博文(81)

文章存档

2014年(1)

2013年(7)

2012年(46)

2011年(27)

分类: 嵌入式

2011-12-07 21:39:09

U-Boot配置

命令:make  _config

如:make  smdk2410_config

U-Boot顶层目录Makefile中有:

smdk2410_config       :      unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t  smdk2410  NULL s3c24x0

同一Makefile中找到unconfig<伪目标>的规则:

unconfig:

       @rm -f  $(obj)include/config.h  $(obj)include/config.mk  \

       $(obj)board/*/config.tmp  $(obj)board/*/*/config.tmp

由于目录下没有一个叫unconfig 的文件存在,所以和unconfig 相关的这条规则总是得到处理,也就是其中的rm命令总是得到执行,该命令的目的是删除一些配置编译过程中产生的文件<可能是以前配置编译时产生的>。在这些文件中,与本文讨论密切相关的是前面两个,以及后面两个。前面两个是用第一条命令来配置UBoot的过程中产生的,后面则是用第二条命令来编译UBoot的过程中产生的。这条规则先把他们全部删除。注意rm命令前面的@符号是取消该命令执行时的回显。

执行完对依赖unconfig的处理,GNU Make 回到对 smdk2410_config 的处理。它接下来执行命令:@$(MKCONFIG) $(@:_config=) arm arm920t  smdk2410  NULL s3c24x0

在这条命令中,$(MKCONFIG) 指代的就是UBoot 根目录下的 mkconfig 脚本,因为你可以在同一Makefile中找到该变量的定义:

 SRCTREE     := $(CURDIR)

 ... ...

 ... ...

 MKCONFIG := $(SRCTREE)/mkconfig

export MKCONFIG

其中 $(SRCTREE) 指代的就是UBoot 根目录。另外在上面的命令中,$(@:_config=) 的部分实际上是处理自动变量$@,也就是第一次 make 的目标 smdk2410_config,这里将其中"_config"的部分用空来代替。去掉"_config"的部分后,剩余的 smdk2410 也就是三星参考板的名称。所以make  smdk2410_config命令也就是执行如下命令:

./mkconfig  smdk2410  arm  arm920t  smdk2410  NULL  s3c24x0

mkconfig脚本开头能看到如下代码:

# Parameters:  Target  Architecture  CPU  Board  [VENDOR]  [SOC]

执行 mkconfig 脚本,并传之以所在的目录名称,s3c24x0是对应的SOC芯片名称。有人对arm920s3c24x0两者所指东西混淆不清,我自己在平时为方便起见也经常混用这两个词,有时候也将它们统称为CPU。但实际上,更精确的说法认为arm920tarm9类型的CPU核,而s3c2410则是用该核搭配另外一些外设做在一块芯片内形成的SOC芯片。由于三星本身出了很多使用arm920tCPU核的芯片,如s3c2400s3c2410以及s3c2440,所以在UBoot代码中,用s3c24x0来统称这一类SOC芯片。

现在分析mkconfig脚本的作用,以smdk2410为参考板,它主要做四件事:

1.确定开发板名称BOARD_NAME,相关代码如下:

APPEND=no  # Default: Create new config file

BOARD_NAME=""      # Name to print in make output

 

while [ $# -gt 0 ] ; do

       case "$1" in

       --) shift ; break ;;

       -a) shift ; APPEND=yes ;;

       -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;

       *)  break ;;

       esac

done

 

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

 

对于./mkconfig  smdk2410  arm  arm920t  smdk2410  NULL  s3c24x0 命令,没有---a-n等符号,所以while直接跳出,执行最后一行后,BOARD_NAME等于第一个参数即smdk2410

2.include目录下制作一些与平台/开发板相关的头文件软链接。代码如下:

#

# Create link to architecture specific headers

#

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 asm

else

       cd ./include  #切换到include目录

       rm -f asm

       ln -s asm-$2 asm   #$2=arm  创建该目录下asm-arm的软链接asm

fi

 

rm -f asm-$2/arch   #删除可能以前创建的asm-arm/arch

if [ -z "$6" -o "$6" = "NULL" ] ; then

       ln -s ${LNPREFIX}arch-$3 asm-$2/arch  #LNPREFIX为空

else

       ln -s ${LNPREFIX}arch-$6 asm-$2/arch

fi

 

if [ "$2" = "arm" ] ; then

       rm -f asm-$2/proc  #删除可能以前创建的asm-arm/proc

       ln -s ${LNPREFIX}proc-armv asm-$2/proc #创建proc-armv软链接asm-arm/proc

fi

3. include目录下创建顶层Makefile要包含的文件include/config.mk,参见代码:

#

# Create include file for Make

#

echo "ARCH   = $2" >  config.mk   #创建config.mk文件

echo "CPU    = $3" >> config.mk    #追加到config.mk文件中

echo "BOARD  = $4" >> config.mk

 

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk

 

[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk

创建的config.mk文件的内容如下:

ARCH =arm

CPU  = arm920t

BOARD = smdk2410

SOC = s3c24x0

4. include目录下制作产生特定于smdk2410参考板的头文件 include/config.h,参见代码:

#

# Create board specific header file

#

if [ "$APPEND" = "yes" ]    # Append to existing config file

then

       echo >> config.h

else

       > config.h            # Create new config file

fi

echo "/* Automatically generated - do not edit */" >>config.h

echo "#include " >>config.h

APPEND维持原值”no”,所以config.h被重新建立,它的内容如下:

/* Automatically generated - do not edit */

#include

阅读(1995) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~