用bashdb调试RV1126的uboot make 脚本

用bashdb调试RV1126的uboot make 脚本

bashdb 是一个bash脚本调试器,和gdb有点像。RV1126 SDK 的uboot通过make.sh编译,使用bashdb调试,能比较清楚其编译原理。

uboot 的结构

RV1126的uboot在SDK文件夹里面的uboot文件夹,其中,make.sh是编译脚本。

使用bashdb调试

进入uboot文件夹,输入

$ bashdb --debug ./make.sh

启动调试

/rv1126_rv1109_sdk/u-boot/make.sh:8):
8:	set -e
bashdb<0>

shell中脚本运行中可能出现命令执行失败的情况,如果执行失败对后续有影响那么就应该退出脚本,不继续往下执行。set -e 命令就可以避免操作失败还继续往下执行的问题。
输入n执行下一行

9:	JOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`

获取cpu的数量
结果可以通过

print $JOB
8

查看

10:	SUPPORT_LIST=`ls configs/*[r,p][x,v,k][0-9][0-9]*_defconfig`

获取支持芯片的列表

print $SUPPORT_LIST
configs/android6.0-rk3399_defconfig configs/dserve_dsrv9703c_defconfig configs/evb-aarch32-rk3308_defconfig configs/evb-px30_defconfig configs/evb-rk3036_defconfig configs/evb-rk3066_defconfig configs/evb-rk3128_defconfig configs/evb-rk3229_defconfig configs/evb-rk3288_defconfig configs/evb-rk3288-rk1608_defconfig configs/evb-rk3308_defconfig configs/evb-rk3326_defconfig configs/evb-rk3328_defconfig configs/evb-rk3399_defconfig configs/evb-rv1108_defconfig configs/fennec-rk3288_defconfig configs/firefly-rk3288_defconfig configs/firefly-rk3399_defconfig configs/gva-rk3229_defconfig configs/kylin-rk3036_defconfig configs/lion-rk3368_defconfig configs/miqi-rk3288_defconfig configs/nokia_rx51_defconfig configs/phycore-rk3288_defconfig configs/popmetal-rk3288_defconfig configs/puma-rk3399_defconfig configs/px30_defconfig configs/rk1806_defconfig configs/rk1808_defconfig configs/rk3036_defconfig configs/rk3126_defconfig configs/rk3128_defconfig configs/rk3128x_defconfig configs/rk322x_defconfig configs/rk3288_defconfig configs/rk3308-aarch32_defconfig configs/rk3308_defconfig configs/rk3326-aarch32_defconfig configs/rk3326_defconfig configs/rk3328_defconfig configs/rk3368_defconfig configs/rk3399_defconfig configs/rk3399pro_defconfig configs/rk3568_defconfig configs/rk3568-spl-spi-nand_defconfig configs/rv1126_defconfig configs/rv1126-spi-nor-tiny_defconfig configs/rv1126-spl-spi-nand_defconfig configs/sheep-rk3368_defconfig configs/tinker-rk3288_defconfig configs/vyasa-rk3288_defconfig

下一个行脚本是

11:	CMD_ARGS=$1

要提前输入脚本的参数rv1126

bashdb<7> set args rv1126

可以通过

show args
Argument list to give script when debugged program starts is:
       "rv1126".

查看命令行参数


60:	RKBIN_TOOLS=../rkbin/tools

63:	ADDR2LINE_ARM32=arm-linux-gnueabihf-addr2line

64:	ADDR2LINE_ARM64=aarch64-linux-gnu-addr2line

65:	OBJ_ARM32=arm-linux-gnueabihf-objdump

66:	OBJ_ARM64=aarch64-linux-gnu-objdump

67:	NM_ARM32=arm-linux-gnueabihf-nm

68:	NM_ARM64=aarch64-linux-gnu-nm

69:	GCC_ARM32=arm-linux-gnueabihf-

70:	GCC_ARM64=aarch64-linux-gnu-

71:	TOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin

72:	TOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin

76:	RKCHIP="-"

77:	RKCHIP_LABEL="-"

78:	RKCHIP_LOADER="-"

79:	RKCHIP_TRUST="-"

81:	INI_TRUST=

82:	INI_LOADER=

85:	RKBIN=

88:	TOOLCHAIN_GCC=

89:	TOOLCHAIN_NM=

90:	TOOLCHAIN_OBJDUMP=

91:	TOOLCHAIN_ADDR2LINE=

94:	PLAT_RSA=

95:	PLAT_SHA=

96:	PLAT_UBOOT_SIZE=

97:	PLAT_TRUST_SIZE=

98:	PLAT_TYPE="RKFW" # default

100:	SRCTREE=`pwd`

101:	SCRIPT_FIT="${SRCTREE}/scripts/fit.sh"

102:	SCRIPT_ATF="${SRCTREE}/scripts/atf.sh"

103:	SCRIPT_TOS="${SRCTREE}/scripts/tos.sh"

104:	SCRIPT_SPL="${SRCTREE}/scripts/spl.sh"

105:	SCRIPT_UBOOT="${SRCTREE}/scripts/uboot.sh"

106:	SCRIPT_LOADER="${SRCTREE}/scripts/loader.sh"

108:	REP_DIR="./rep"

上面把各个变量都赋好值

822:	process_args $*

进入函数process_args
在255行中,有个case的缺省 *),

174:		while [ $# -gt 0 ]; do

175:			case $1 in

257:					NUM=$(${SCRIPT_FIT} --args $1)

执行这句得到结果 0

$ bashdb ./fit.sh --args rv1126
7:	set -e
bashdb<0> show args
Argument list to give script when debugged program starts is:
       "./fit.sh --args rv1126".
9:	FIT_DIR="fit"
10:	IMG_UBOOT="uboot.img"
11:	IMG_BOOT="boot.img"
12:	IMG_RECOVERY="recovery.img"
13:	ITB_UBOOT="${FIT_DIR}/uboot.itb"
14:	ITB_BOOT="${FIT_DIR}/boot.itb"
15:	ITB_RECOVERY="${FIT_DIR}/recovery.itb"
16:	SIG_BIN="data2sign.bin"
17:	SIG_UBOOT="${FIT_DIR}/uboot.data2sign"
18:	SIG_BOOT="${FIT_DIR}/boot.data2sign"
19:	SIG_RECOVERY="${FIT_DIR}/recovery.data2sign"
21:	OFFS_NS_UBOOT="0xc00"
22:	OFFS_S_UBOOT="0xc00"
23:	OFFS_NS_BOOT="0x800"
24:	OFFS_S_BOOT="0xc00"
25:	OFFS_NS_RECOVERY="0x800"
26:	OFFS_S_RECOVERY="0xc00"
28:	CHIP_FILE="arch/arm/lib/.asm-offsets.s.cmd"
30:	FDT_ADDR_PLACEHOLDER="0xffffff00"
31:	KERNEL_ADDR_PLACEHOLDER="0xffffff01"
32:	RAMDISK_ADDR_PLACEHOLDER="0xffffff02"
34:	MKIMAGE="./tools/mkimage"
35:	FIT_UNPACK="./scripts/fit-unpack.sh"
36:	CHECK_SIGN="./tools/fit_check_sign"
38:	KEY_DIR="keys/"
39:	RSA_PRI_KEY="keys/dev.key"
40:	RSA_PUB_KEY="keys/dev.crt"
41:	SIGNATURE_KEY_NODE="/signature/key-dev"
42:	SPL_DTB="spl/u-boot-spl.dtb"
43:	UBOOT_DTB="u-boot.dtb"
45:	ITS_UBOOT="u-boot.its"
46:	ITS_BOOT="boot.its"
47:	ITS_RECOVERY="recovery.its"
48:	ARG_VER_UBOOT="0"
49:	ARG_VER_BOOT="0"
50:	ARG_VER_RECOVERY="0"
655:	fit_process_args $*
bashdb<38> s
119:	{
120:		if [ $# -eq 0 ]; then
125:		while [ $# -gt 0 ]; do
126:			case $1 in
128:					ARG_VALIDATE=$2
129:					shift 2
125:		while [ $# -gt 0 ]; do
200:		if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
grep: .config: 没有那个文件或目录

657:	if [ ! -z "${ARG_VALIDATE}" ]; then
658:		validate_arg ${ARG_VALIDATE}
bashdb<50> s
103:	{
104:		case $1 in
112:				shift=0
115:		echo ${shift}
bashdb<54> 
0

依照上面的结果 0,继续往下走

258:					if  [ ${NUM} -ne 0 ]; then
264:					elif [ -z $(echo $1 | sed 's/[0-9,a-f,A-F,x,X,-]//g') ]; then
268:						ARG_BOARD=$1
269:						if [ ! -f configs/${ARG_BOARD}_defconfig -a ! -f configs/${ARG_BOARD}.config ]; then
273:						elif [ -f configs/${ARG_BOARD}.config ]; then
280:							MAKE_CMD="make ${ARG_BOARD}_defconfig -j${JOB}"
281:							echo "## ${MAKE_CMD}"
bashdb<53> 
## make rv1126_defconfig -j8
282:							make ${ARG_BOARD}_defconfig ${OPTION}
bashdb<54> 
#
# configuration written to .config
#
285:					shift 1
174:		while [ $# -gt 0 ]; do
290:		if [ ! -f .config ]; then

通过
make ${ARG_BOARD}_defconfig ${OPTION}
这句把.config写入

继续往下走到prepare函数

823:    prepare
bashdb<42> s
154:    {
155:            if [ -d ${RKBIN_TOOLS} ]; then
156:                    absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd)
#获得RKBIN的绝对路径
157:                    RKBIN=${absolute_path}
#非ARM64
163:            if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' .config ; then

167:            if grep  -q '^CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y' .config ; then
168:                    PLAT_TYPE="FIT"

select_toolchain

824:    select_toolchain
bashdb<51> s
299:    {
300:            if grep -q '^CONFIG_ARM64=y' .config ; then
#TOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin
312:                    if [ -d ${TOOLCHAIN_ARM32} ]; then
#相对路径转绝对路径
313:                            absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd)
314:                            TOOLCHAIN_NM=${absolute_path}/bin/${NM_ARM32}
315:                            TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32}
316:                            TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32}
317:                            TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32}

select_chip_info

825:    select_chip_info
bashdb<60> s
333:    {
bashdb<61> n
339:            CHIP_PATTERN='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}'
340:            RKCHIP=`egrep -o ${CHIP_PATTERN} .config`
343:            RKCHIP=${RKCHIP##*_}
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
345:            for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
347:                    CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'`
348:                    if grep  -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then
356:            if [ "${RKCHIP_LOADER}" == "-" ]; then
357:                    RKCHIP_LOADER=${RKCHIP}
359:            if [ "${RKCHIP_TRUST}" == "-" ]; then
360:                    RKCHIP_TRUST=${RKCHIP}
362:            if [ "${RKCHIP_LABEL}" == "-" ]; then
363:                    RKCHIP_LABEL=${RKCHIP}

fixup_platform_configure


369:    {
370:            U_KB="-" U_NUM="-" T_KB="-" T_NUM="-"  SHA="-" RSA="-"
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
372:            for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
374:                    config_xxx=`echo ${item} | awk '{ print $1 }'`
375:                    if grep  -q "^${config_xxx}=y" .config ; then
377:                            RSA=`echo ${item} | awk '{ print $2 }'`
378:                            SHA=`echo ${item} | awk '{ print $3 }'`
381:                            if grep -q '^CONFIG_ARM64=y' .config ; then
387:                                    U_KB=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $1 }'`
388:                                    T_KB=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $2 }'`
389:                                    U_NUM=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $1 }'`
390:                                    T_NUM=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $2 }'`
392:                                    if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then
407:            if [ "${SHA}" != "-" ]; then
410:            if [ "${RSA}" != "-" ]; then
411:                    PLAT_RSA="--rsa ${RSA}"
413:            if [ "${U_KB}" != "-" ]; then
416:            if [ "${T_KB}" != "-" ]; then
421:            if [ ! -z "${ARG_UBOOT_SIZE}" ]; then
425:            if [ ! -z "${ARG_TRUST_SIZE}" ]; then

select_ini_file

432:    {
434:            INI_LOADER=${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini
435:            if [ "${ARM64_TRUSTZONE}" == "y" ]; then
438:                    INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TOS.ini
' | tr -d '"'`  NAME=`sed -n "/CONFIG_LOADER_INI=/s/CONFIG_LOADER_INI=//p" .config |tr -d '
443:            if [ ! -z "${NAME}" ]; then
' | tr -d '"'`  NAME=`sed -n "/CONFIG_TRUST_INI=/s/CONFIG_TRUST_INI=//p" .config |tr -d '
447:            if [ ! -z "${NAME}" ]; then
452:            if [ ! -z "${ARG_INI_TRUST}" ]; then
455:            if [ ! -z "${ARG_INI_LOADER}" ]; then

handle_args_late


789:    {
790:            ARG_LIST_FIT="${ARG_LIST_FIT} --ini-trust ${INI_TRUST} --ini-loader ${INI_LOADER}"

sub_commands

461:    {
463:            if [[ ${CMD_ARGS} != --* ]]; then
464:                    CMD=${CMD_ARGS%-*}
465:                    ARG=${CMD_ARGS#*-}
470:            if [ "${ARG_TSPL}" == "tpl" -o "${ARG_TSPL}" == "spl" ]; then
475:                    ELF=u-boot
476:                    MAP=u-boot.map
477:                    SYM=u-boot.sym
480:            case ${CMD} in
539:                            unwind_addr_or_continue
bashdb<168> s
545:    {
bashdb<169> n
546:            FUNCADDR=${ARG_FUNCADDR}
547:            RELOCOFF=${FUNCADDR#*-}
548:            FUNCADDR=${FUNCADDR%-*}
550:            if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then
550:            if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then
[ ${FUNCADDR} ]

clean_files

794:    {
795:            rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -f
796:            rm spl/u-boot-spl tpl/u-boot-tpl u-boot -f
831:    make PYTHON=python2 CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB}
bashdb<180> print $TOOLCHAIN_GCC
/home/magee/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

最后进行make

对于make部分,整个脚本就做了两件事情:

make ${ARG_BOARD}_defconfig ${OPTION}

替换里面的变量就是

make rv1126_defconfig -j8

把配置文件写到根目录

make PYTHON=python2 CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB}

make uboot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值