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
${BASH_SOURCE[0]} :获取文件路径,包括文件名。/home/admin/a.sh
$(dirname ${BASH_SOURCE[0]}):获取给定路径的目录部分,/home/admin
$(dirname ${BASH_SOURCE[0]})/..:获取路径的上一级目录,/home
dpdk主目录如下/home/admin/dpdk_proj/dpdk-1.8.0,setup.sh脚本在/home/admin/dpdk_proj/dpdk-1.8.0/tools/setup.sh。在dpdk主目录下执行./tools/setup.sh,
$(dirname ${BASH_SOURCE[0]})/..命令获取的是tools/..目录,即/home/admin/dpdk_proj/dpdk-1.8.0。cd 到tools/..目录。
解析:获取DPDK SDK的根目录
当前已经到达tools/..目录,通过pwd获取目录绝对路径,/home/admin/dpdk_proj/dpdk-1.8.0。
export RTE_SDK,使得RTE_SDK成为一个环境变量,在此脚本的所有子进程中都可使用。
-
STEPS[1]="step1_func"
-
STEPS[2]="step2_func"
-
STEPS[3]="step3_func"
-
STEPS[4]="step4_func"
-
STEPS[5]="step5_func"
解析:用一个数组,存储5个功能函数。
-
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_i686-native-linuxapp-gcc
config/defconfig_i686-native-linuxapp-icc
config/defconfig_ppc_64-power8-linuxapp-gcc
config/defconfig_x86_64-ivshmem-linuxapp-gcc
config/defconfig_x86_64-ivshmem-linuxapp-icc
config/defconfig_x86_64-native-bsdapp-clang
config/defconfig_x86_64-native-bsdapp-gcc
config/defconfig_x86_64-native-linuxapp-clang
config/defconfig_x86_64-native-linuxapp-gcc
config/defconfig_x86_64-native-linuxapp-icc
-
${cfg/config\/defconfig_/}将for循环每个成员的config/defconfig_替换成空、
cfg值:
i686-native-linuxapp-gcc
i686-native-linuxapp-icc
ppc_64-power8-linuxapp-gcc
x86_64-ivshmem-linuxapp-gcc
x86_64-ivshmem-linuxapp-icc
x86_64-native-bsdapp-clang
x86_64-native-bsdapp-gcc
x86_64-native-linuxapp-clang
x86_64-native-linuxapp-gcc
x86_64-native-linuxapp-icc
-
在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
解析:
STEPS[@]获取STEPS数组的所有成员
${#STEPS[@]}的${# array}获取成员的个数
${seq num},枚举数字,当num等于3时,${seq 3}扩展成1,2,3
-
OPTION_NUM表示所有选项的一个编号,将所有选项对应的执行函数存入到OPTIONS数组中。当选择相应的编号的选项时,则会执行OPTIONS数组对应的执行函数
-
${OPTIONS[our_entry]} ${our_entry},传入选择的编号,并执行相应选项的函数
编译环境选项如下:
----------------------------------------------------------
Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] i686-native-linuxapp-gcc
[2] i686-native-linuxapp-icc
[3] ppc_64-power8-linuxapp-gcc
[4] x86_64-ivshmem-linuxapp-gcc
[5] x86_64-ivshmem-linuxapp-icc
[6] x86_64-native-bsdapp-clang
[7] x86_64-native-bsdapp-gcc
[8] x86_64-native-linuxapp-clang
[9] x86_64-native-linuxapp-gcc
[10] x86_64-native-linuxapp-icc
-
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}
假设我们选择编译环境为[1] i686-native-linuxapp-gcc:
在/home/admin/dpdk_proj/dpdk-1.8.0目录下执行make install T=i686-native-linuxapp-gcc,会执行dpdk根目录的GNUmakefile
阅读(4957) | 评论(0) | 转发(1) |