一、简介
硬件平台:开发板的SoC是三星公司的S5PV210,属于210系列开发板。
uboot:选择uboot官方u-boot-2013.10版本进行移植。
在uboot的board/samsung文件夹中选择与210相近的开发板作为模板进行移植,这里选择的是goni文件,该开发板对应的头文件是include/configs文件夹中的s5p_goni.h。
二、uboot的配置
%_config:: unconfig
@$(MKCONFIG) -A $(@:_config=)
uboot编译之前要进行配置。配置时执行make %_config。这里的%是通配符,根据第三部分的介绍可以知道在配置时这里的%具体用什么来代替。配置实际上是执行mkconfig脚本,脚本传参两个,$1 = -A;$2 = %(通配符)。
三、uboot中配置脚本(mkconfig)介绍
if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
# Automatic mode
line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' boards.cfg`
if [ -z "$line" ] ; then
echo "make: *** No rule to make target \`$2_config'. Stop." >&2
exit 1
fi
set ${line}
# add default board name if needed
[ $# = 3 ] && set ${line} ${1}
fi
上面这段代码采用正则表达式从boards.cfg配置文件中提取域7与$2相等的那一行赋值给line。
awk读取boards.cfg文件,一次一行;$0 !~ /^#/读取的这一行不以#号开头,即没有被注释掉,$0表示所有的域,!~表示不匹配;$7 ~ /^'"$2"'$/表示域7与第二个位置参数匹配;print $1, $2, $3, $4, $5, $6, $7, $8条件满足则打印这一行。
查看boards.cfg文件后可以发现比较合适的一行是:
Active arm armv7 s5pc1xx samsung goni s5p_goni -
set ${line}后改变位置参数:
$# = 8
$1 = Active
$2 = arm
$3 = armv7
$4 = s5pc1xx
$5 = samsung
$6 = goni
$7 = s5p_goni
$8 = -
从这里可以印证我们在配置时执行的make %_config中的%是s5p_goni。因为是域7进行匹配。直接执行make s5p_goni_config。