设为首页 加入收藏

TOP

u-boot-1.1.6第1阶段分析之make smdk2410_config指令(一)
2018-07-13 06:06:57 】 浏览:202
Tags:u-boot-1.1.6 阶段 分析 make smdk2410_config 指令

uboot源码中的README文档中介绍要使用uboot必须先进行配置后编译,即先执行make xxx_config命令,然后执行make命令,下面以make smdk2410_config指令为例来介绍uboot的配置过程。


解压uboot-1.1.6文件夹后,在顶层目录的Makefile中可以看到如下代码:


87 SRCTREE        := $(CURDIR)
92 MKCONFIG    := $(SRCTREE)/mkconfig
1879 smdk2410_config    :    unconfig
1880    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0


我们在u-boot-1.1.6的根目录下编译,那么第87行代表当前目录的变量$(CURDIR)即为u-boot-1.1.6的根目录,立即变量SRCTREE等于$(CURDIR),也表示uboot的根目录,所以第92行中的MKCONFIG就是根目录下的mkconfig文件。第1879和1880代码告诉我们,执行make smdk2410_config时就相当于执行一下指令:


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


这条语句中有个高级的语法$(var:a=b),意思是把变量"var"中所有的以字符串"a"结尾变量的结尾字符串"a"替换成字符串"b"。由上面的分析,$@代表的是目标"smdk2410_config",  "_config="意思是_config等于空字符,所以$(@:_config=)就是将目标"smdk2410_config"中的"_config"去掉,结果为"smdk2410"。将这条语句中各处的变量展开,可以清楚的看到执行"make smdk2410_config"实际是执行下面命令:


          ./mkconfig  smdk2410  arm  arm920t  smdk2410  NULL  s3c24x0 


              $0              $1            $2        $3            $4            $5          $6


再来看看makconfig的作用,打开mkconfig脚本,可以清楚看到在文件开头的第6行给出了它的用法:           


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


这里刚好与上面分析make smdk2410_config执行命令相对应,Parameters($0)  Target($1)  Architecture($2)  CPU($3)  Board($4)  [VENDOR]($5)  [SOC]($6)


下面来详细分析mkconfig的作用


11 APPEND=no    # Default: Create new config file
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"


对于“./mkconfig  smdk2410  arm  arm920t  smdk2410  NULL  s3c24x0” 命令中没有"--","-a","-n","*"等符号,所以14~22行代码没有实现任何相应操作,第11和12行的变量仍然为原来定义是内容。执行完第23行语句时BOARD_NAME等于第一个参数"smdk2410"。


25 [ $# -lt 4 ] && exit 1
26 [ $# -gt 6 ] && exit 1
27
28 echo "Configuring for ${BOARD_NAME} board..."


第25,26行中,$#表示输入总参数个数,-lt为小于(less than),-gt为大于(greater than),&&表示左边命令为真则执行"exit 1",跳出执行。由于总参数个数为6,所以不满足25,26执行条件,所以不跳出继续执行,28行为打印配置信息,当执行"make smdk2410_config"时将自动打印此处信息。


30 #
31 # Create link to architecture specific headers
32 #
33 if [ "$SRCTREE" != "$OBJTREE" ] ; then                /* 判断源代码目录和目标代码目录不相同 */
34    mkdir -p ${OBJTREE}/include
35    mkdir -p ${OBJTREE}/include2
36    cd ${OBJTREE}/include2
37    rm -f asm
38    ln -s ${SRCTREE}/include/asm-$2 asm
39    LNPREFIX="../.

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一张思维导图带你梳理HashMap相关.. 下一篇Javascript装饰器的妙用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目