U-boot根目录下的mkconfig分析
此文件位于uboot源码的根目录下,是源码自带的shell脚本文件,主要功能是创建符号链接以及一些头文件(拥有符号链接的功能)。
输入make x210_sd_config时,本脚本将会被主Makefile调用执行。
其内容主要结构为:
1.解析输入参数
2.创建符号链接及一些头文件
需要注意的是,结构顺序不代表代码执行顺序,关于代码的执行顺序以及推荐阅读顺序请移步 [ U-boot配置及编译阶段流程宏观分析 ]
1.解析输入参数
这个脚本在主makefile中被执行前,会被传入6个参数,分别是:x210_sd,arm,s5pc11x,x210,samsung,s5pc110。所以和参数有关的变量为$#=6($#的值是输入参数个数),$1=x210_sd $2=arm $3=s5pc11x $4=x210 $5=samsung $6=s5pc110
- 本段代码的功能为解析传入本脚本的参数,首先利用了一个while循环,判断$#的值(即参数个数),是否大于0,如果大于0则进入循环
- shell的switch case语法中是不需要break的,故此处的switch case是为了跳出外面的while循环
- 此外每个case的结束都需要加’;’执行语句结束也要加’;’,所以在每行case的最后都会有两个分号
- 这段代码上来先判断$1的值(即第一个参数),如果为一些特定的值,那么会进行shift操作,即向左移动参数列表一次,将第一个参数移出参数列表
- 但由于我们第一个参数为x210_sd,故只符合最后一个case即*,也就是通配符,直接break跳出了while循环。其实这整段代码对我们没有产生什么作用。
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
- 本句是缩写的if判断语句,判断变量BOARD_NAME是否不为空,由于在12行处对其赋为空值,所以此处将它的值赋为第一个参数的值,即x210_sd