dpdk中/home/admin/dpdk_proj/dpdk-1.8.0/tools/setup.sh脚本解析:
点击(此处)折叠或打开
- cd $(dirname ${BASH_SOURCE[0]})/..
解析:${BASH_SOURCE} 获取执行脚本的路径
脚本路径:/home/admin/a.sh
在/var目录下执行脚本 ../home/admin/a.sh, ${BASH_SOURCE}输出为../home/admin/a.sh
使用绝对路径/home/admin/a.sh,${BASH_SOURCE}输出为/home/admin/a.sh
点击(此处)折叠或打开
- export RTE_SDK=$PWD
解析:获取DPDK SDK的根目录
点击(此处)折叠或打开
- STEPS[1]="step1_func"
- STEPS[2]="step2_func"
- STEPS[3]="step3_func"
- STEPS[4]="step4_func"
- STEPS[5]="step5_func"
点击(此处)折叠或打开
- step1_func()
- {
- TITLE="Select the DPDK environment to build"
- CONFIG_NUM=1
- for cfg in config/defconfig_* ; do
- cfg=${cfg/config\/defconfig_/}
- TEXT[$CONFIG_NUM]="$cfg"
- TARGETS[$CONFIG_NUM]=$cfg
- FUNC[$CONFIG_NUM]="setup_target"
- let "CONFIG_NUM+=1"
- done
- }
解析:
- 设置TITLE变量,每个函数都会去设置,标识此函数的功能。
- CONFIG_NUM用于计数
- 获取config目录下所有defconfig文件,每个defconfig文件对应一种编译环境
- ${cfg/config\/defconfig_/}将for循环每个成员的config/defconfig_替换成空、
- 在TEXT存储每种编译环境名称
- 在TARGETS存储每种编译环境名称,用于make时获取T参数
- 在FUNC存放每种编译环境所对应的功能函数
点击(此处)折叠或打开
- QUIT=0
- while [ "$QUIT" == "0" ]; do
- OPTION_NUM=1
- for s in $(seq ${#STEPS[@]}) ; do
- ${STEPS[s]}
- echo "----------------------------------------------------------"
- echo " Step $s: ${TITLE}"
- echo "----------------------------------------------------------"
- for i in $(seq ${#TEXT[@]}) ; do
- echo "[$OPTION_NUM] ${TEXT[i]}"
- OPTIONS[$OPTION_NUM]=${FUNC[i]}
- let "OPTION_NUM+=1"
- done
- # Clear TEXT and FUNC arrays before next step
- unset TEXT
- unset FUNC
- echo ""
- done
- echo "[$OPTION_NUM] Exit Script"
- OPTIONS[$OPTION_NUM]="quit"
- echo ""
- echo -n "Option: "
- read our_entry
- echo ""
- ${OPTIONS[our_entry]} ${our_entry}
- echo
- echo -n "Press enter to continue ..."; read
- done
解析:
- $(seq ${#STEPS[@]}) :
- OPTION_NUM表示所有选项的一个编号,将所有选项对应的执行函数存入到OPTIONS数组中。当选择相应的编号的选项时,则会执行OPTIONS数组对应的执行函数
- ${OPTIONS[our_entry]} ${our_entry},传入选择的编号,并执行相应选项的函数
点击(此处)折叠或打开
- setup_target()
- {
- option=$1
- export RTE_TARGET=${TARGETS[option]}
- compiler=${RTE_TARGET##*-}
- if [ "$compiler" == "icc" ] ; then
- platform=${RTE_TARGET%%-*}
- if [ "$platform" == "x86_64" ] ; then
- setup_icc intel64
- else
- setup_icc ia32
- fi
- fi
- if [ "$QUIT" == "0" ] ; then
- make install T=${RTE_TARGET}
- fi
- echo "------------------------------------------------------------------------------"
- echo " RTE_TARGET exported as $RTE_TARGET"
- echo "------------------------------------------------------------------------------"
- }
- export RTE_TARGET=${TARGETS[option]}获取相应的编译环境,作为make的T
- 此处只解释编译环境使用gcc的情况,make install T=${RTE_TARGET}