Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316461
  • 博文数量: 40
  • 博客积分: 1155
  • 博客等级: 少尉
  • 技术积分: 1047
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 16:41
文章分类

全部博文(40)

文章存档

2012年(38)

2011年(2)

分类: 嵌入式

2012-05-01 00:54:43


配置Uboot:make 100ask24x0_config

摘自u-boot-1.1.6的Makefile
MKCONFIG := $(SRCTREE)/mkconfig
SRCTREE := $(CURDIR)

unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

100ask24x0_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
1,@ 这条命令将不会被make显示出来
2,$(MKCONFIG) = $($(SRCTREE)/mkconfig) = $($($(CURDIR))/mkconfig) CURDIR   是文件当前所在目录,也就是说是u-boot-1.1.6/mkconfig(shell脚本文件)
3,$(@:_config=) 这是make中变量的用法:$(var:a=b) 变量值的替换。
  把变量"var"( 即$(var) )中的所有以"a"字串"结尾"的"a"替换成"b"字串。
  这里"结尾"的意思是"空格"或是“结束符” $@:就是表示目标文件集,这里是     100ask24x0_config
  所以这里的意思就是把$@ = 100ask24x0_config中的“_config”替换为空
4,还有这unconfig 是一个伪目标,作用是删除之前配置生成的文件。
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

./u-boot-1.1.6/mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0

看看 mkconfig 这shell脚本做了什么,它是如何配置uboot的。

比较短,如下:

点击(此处)折叠或打开

  1. APPEND=no    # Default: Create new config file
  2. BOARD_NAME=""    # Name to print in make output

  3. while [ $# -gt 0 ] ; do  # $# 这东西表示传递到shell脚本或函数的参数 个数
  4.     case "$1" in         # mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
  5.     --) shift ; break ;; # $0       $1         $2  $3      $4         $5   $6
  6.     -a) shift ; APPEND=yes ;; # 位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1
  7.     -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
  8.     *) break ;;
  9.     esac
  10. done                     #因为命令中没有任何选项,所以这部分不执行

  11. [ "${BOARD_NAME}" ] || BOARD_NAME="$1" # BOARD_NAME为空所以执行 BOARD_NAME="$1" 
  12.                                                      即 BOARD_NAME=100ask24x0

  13. [ $# -lt 4 ] && exit 1
  14. [ $# -gt 6 ] && exit 1 # 我们这参数个数为 5

  15. echo "Configuring for ${BOARD_NAME} board..." 
  16.                                         #输出:Configuring for 100ask24x0 board...

  17. #
  18. # Create link to architecture specific headers
  19. #
  20. if [ "$SRCTREE" != "$OBJTREE" ] ; then 
  21.                                # OBJTREE:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
  22.     mkdir -p ${OBJTREE}/include # 我们这没有在命令行定义 BUILD_DIR 所以 OBJTREE=CURDIR
  23.     mkdir -p ${OBJTREE}/include2
  24.     cd ${OBJTREE}/include2
  25.     rm -f asm
  26.     ln -s ${SRCTREE}/include/asm-$2 asm
  27.     LNPREFIX="../../include2/asm/" #由于这部分指令都没有执行,所以这一条也就没办法执行了,
  28.                                    #LNPREFIX 为空
  29.     cd ../include
  30.     rm -rf asm-$2
  31.     rm -f asm
  32.     mkdir asm-$2
  33.     ln -s asm-$2 asm
  34. else
  35.     cd ./include
  36.     rm -f asm
  37.     ln -s asm-$2 asm #在u-boot-1.1.6/include 下 建立一个软连接 asm -> asm-arm
  38. fi

  39. rm -f asm-$2/arch    #删除 asm-arm/arch 目录

  40. if [ -z "$6" -o "$6" = "NULL" ] ; then #$6 = s3c24x0 不为空 也不等于 “NULL”
  41.     ln -s ${LNPREFIX}arch-$3 asm-$2/arch
  42. else
  43.     ln -s ${LNPREFIX}arch-$6 asm-$2/arch #建立软连接 asm-arm/arch -> arch-s3c24x0
  44. fi

  45. if [ "$2" = "arm" ] ; then                    #$2 = arm 执行
  46.     rm -f asm-$2/proc                         #删除 asm-arm/proc目录
  47.     ln -s ${LNPREFIX}proc-armv asm-$2/proc    #建立软连接 asm-arm/proc -> proc-armv
  48. fi

  49. #
  50. # Create include file for Make
  51. #
  52. echo "ARCH = $2" > config.mk #创建顶层Makefile包含的文件 include/config.mk ARCH = arm
  53. echo "CPU = $3" >> config.mk                                                                                                                               CPU = arm920t
  54. echo "BOARD = $4" >> config.mk                                   BOARD = 100ask24x0

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

  56. [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk 
  57.                                                         #$6 = s3c24x0 SOC = s3c24x0

  58. #
  59. # Create board specific header file
  60. #
  61. if [ "$APPEND" = "yes" ]    # Append to existing config file
  62. then
  63.     echo >> config.h
  64. else
  65.     > config.h        # Create new config file #APPEND = no 所以新建文件 config.h
  66. fi
  67. echo "/* Automatically generated - do not edit */" >>config.
  68.                        #config.h文件内容:/* Automatically generated - do not edit */
  69. echo "#include " >>config.h # 
  70.                        #include <configs/100ask24x0.h>

  71. exit 0
总结 配置命令make 100ask24x0_config 实际就是执行./u-boot-1.1.6/mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0

1,开发板名称:BOARD_NAME=100ask24x0
2,创建到平台/开发板相关的头文件的链接,如下:
   ln -s asm-$2 asm 
             #在u-boot-1.1.6/include 下 建立一个软连接 asm -> asm-arm
   ln -s ${LNPREFIX}arch-$6 asm-$2/arch    
             #建立软连接 asm-arm/arch -> arch-s3c24x0
   ln -s ${LNPREFIX}proc-armv asm-$2/proc  
             #建立软连接 asm-arm/proc -> proc-armv
3,创建顶层Makefile包含的文件include/config.mk,如下:
   echo "ARCH   = $2" >  config.mk                                                                             ARCH   = arm  
   echo "CPU    = $3" >> config.mk                                               CPU    = arm920t 
   echo "BOARD  = $4" >> config.mk                                                                             BOARD  = 100ask24x0         
   [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk                                           SOC    = s3c24x0   
4,创建开发板相关的头文件 include/config.h,如下:
   echo "/* Automatically generated - do not edit */" >>config.h     
                    /* Automatically generated - do not edit */
   echo "#include " >>config.h                                                 #include                   
                                                                     
/u-boot-1.1.6/include/configs 下的 ***.h 文件便是开发板***的配置文件
手动修改配置此文件来剪裁,设置uboot

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