跟踪U-Boot

  在顶层Makefile中可以看到如下代码:

  SRCTREE       := $(CURDIR)

......

  MKCONFIG    := $(SRCTREE)/mkconfig

......

smdk2410_config :    unconfig

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

   假定在U-Boot-1.1.6的根目录下编译,则其中的MKCONFIG就是根目录下的mkconfig文件。$(@:_conifg=)的结果就是将“smdk2410_config”中的“_config”去掉,结果为“smdk2410”。所以就是执行如下命令:

     ./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0

   再来看看mkconfig的作用,在mkconfig文件开头第6行给出了它的用法:

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

 

   下面分步骤分析mkconfig的作用。

 

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

        12 BOARD_NAME=“”    #Name to print in make output

        13

        14  while  [$# -gt 0] ; do

        15  case "$1" in

        16  --) shift ; break;;

        17 -a) shift ; APPEND=yes;;

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

        19 *)  break;

        20  esac

        21   done

        22

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

 

    命令没有“--”、“-a”、“-n”等符号,所以第14~22行没做任何事情。第11/12行两个变量仍维持原值。

    执行完第23行后,BOARD_NAME的值等于第一个参数,即“smdk2410”。

 

    (2)创建到平台/开发板相关的头文件的链接

30 #

31 # Create link to architecture specifix headers

32 #

33 if [  "SRCTREE" != "$OBJTREE"  ]  ; then

.......

45 else

46        cd ./include

47        rm -f asm

48        lin -s asm-$2   asm

49 fi

50

 

继续往下看:

 

51 rm  -f  asm-$2/arch

52

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

54        ln -s ${LNPREFIX}arch-$3   asm-$2/arch

55 else

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

57 fi

58

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

60       rm -f  asm-$2/proc

61       ln -s ${LNPREFIX}proc-armv   asm-$2/proc

62 fi

63

 

 第51行删除asm-$2/arch目录,$6为“s3c24x0”,不为空,所以第53行的条件不满足,将执行else分支。

 第56行中,LNPREFIX为空,所以这个命令实际上就是“ln -s arch-$6  asm-$2/arch”, 即

          “ln -s  arch-s3c24x0 asm-arm/arch”。

  第60/61行重新建立asm-arm/proc文件,并让它链接向proc-armv目录。

 

 

(3)  创建顶层Makefile包含的文件include/config.mk

 

64 #

65 #  Create include file for Make

66 #

67 echo "ARCH   = $2"  >  config.mk

68 echo "CPU     = $3"   >>  config.mk

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

70

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

72

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

 

 上面几行代码创建的config.mk文件内容:

   ARCH    = arm

   CPU      = arm920t

   BOARD  = smdk2410

   SOC      = s3c24x0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值