boards.cfg只有下面这行符合条件:
Active arm armv7 s5pc1xx samsung smdkc100 smdkc100
然后执行{ print $1, $2, $3, $4, $5, $6, $7, $8 }
这样line就等于Active arm armv7 s5pc1xx samsung smdkc100 smdkc100
接下来:
set ${line}
# add default board name if needed
[ $# = 3 ] && set ${line} ${1}
set命令
参见《高级bash脚本编程指南》202页
set 命令用来修改内部脚本变量的值.一个作用就是触发选项标志位来帮助决定脚本的行
为.另一个应用就是以一个命令的结果(set `command`)来重新设置脚本的位置参数.脚本
将会从命令的输出中重新分析出位置参数。
所以mkconfig 的位置参数被重新定义为$(line)的内容,即:
$1=Active $2=arm $3=armv7 $4=s5pc1xx
$5=samsung $6=smdkc100 $7=smdkc100
$8=-(注意是短破折号,不是空格)
补充一下,以上排列为:
# Status, Arch, CPU:SPLCPU, SoC, Vendor, Board name, Target, Options
对于[ $# = 3 ] && set ${line} ${1}:
&&的说明参见《LINUX与UNIX SHELL编程指南》6.1 使用&&
这里先判断$# 是否等于 3(明显不等),相等则执行&&右边的命令。那么,直接跳过吧。
1 |
while [ $# -gt 0 ] ; do |
4 |
-a) shift ; APPEND=yes ;; |
5 |
-n) shift ; BOARD_NAME= "${7%_config}" ; shift ;; |
6 |
-t) shift ; TARGETS= "`echo $1 | sed ‘s:_: :g‘` ${TARGETS}" ; shift ;; |
其实上面的参数都不会匹配到。(没有指定-a -n -t选项)
这里只说一下${7%_config},结果等于smdkc100 ,请百度shell 截取 变量。
%号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
实际上$7本身等于smdkc100了,那么${7%_config}依然是smdkc100。
后面的代码比较简单了,实现如下功能:
变量arch="arm"
建立软连接:
arch\arm\include\asm\arch-s5pc1xx 生成链接符号 arch\arm\include\asm\arch
进入include目录
01 |
# Create include file for Make |
03 |
( echo "ARCH = ${arch}" |
04 |
if [ ! -z "$spl_cpu" ] ; then |
05 |
echo ‘ifeq ($(CONFIG_SPL_BUILD),y)‘ |
06 |
echo "CPU = ${spl_cpu}" |
13 |
echo "BOARD = ${board}" |
15 |
[ "${vendor}" ] && echo "VENDOR = ${vendor}" |
16 |
[ "${soc}" ] && echo "SOC = ${soc}" |
include目录下生成config.mk,内容为:
ARCH = arm
CPU = armv7
BOARD = smdkc100
VENDOR = samsung
SOC = s5pc1xx
include目录下创建config.h
for i in ${TARGETS} ; do
i="`echo ${i} | sed ‘/=/ {s/=/ /;q; } ; { s/$/ 1/; }‘`"
echo "#define CONFIG_${i}" >>config.h ;
done
${TARGETS} 为空,所以以上for循环不会被执行。
01 |
echo "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.h |
02 |
echo "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.h |
03 |
echo "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h |
05 |
[ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h |
07 |
[ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.h |
09 |
[ "${board}" ] && echo "#define CONFIG_BOARDDIR board/$BOARDDIR" >> config.h |
10 |
cat << EOF >> config.h |
11 |
#include <config_cmd_defaults.h> |
12 |
#include <config_defaults.h> |
13 |
#include <configs/${CONFIG_NAME}.h> |
14 |
#include <asm/config.h> |
15 |
#include <config_fallbacks.h> |
16 |
#include <config_uncmd_spl.h> |
1 |
cat << EOF >> config.h表示以下内容追加到config.h中,直到出现EOF标记为止。 |
最终config.h内容为:
02 |
#define CONFIG_SYS_ARCH "arm" |
03 |
#define CONFIG_SYS_CPU "armv7" |
04 |
#define CONFIG_SYS_BOARD "smdkc100" |
05 |
#define CONFIG_SYS_VENDOR "samsung" |
06 |
#define CONFIG_SYS_SOC "s5pc1xx" |
07 |
#define CONFIG_BOARDDIR board/samsung/smdkc100 |
08 |
#include <config_cmd_defaults.h> |
09 |
#include <config_defaults.h> |
10 |
#include <configs/smdkc100.h> |
11 |
#include <asm/config.h> |
12 |
#include <config_fallbacks.h> |
13 |
#include <config_uncmd_spl.h> |