RK1808 uboot的编译分析

前言

为了更深入了解rk1808 sdk,对其中关于uboot部分的脚本和makefile等做一个分析

主要参考文件:Rockchip_Developer_Guide_Linux_Software_CN.pdf

uboot的编译

根据文档的说法,编译uboot有两种方法

  • 在uboot目录下编译

这种方法,先cd到uboot目录下,然后执行

sudo ./make.sh rk1808
  • 在顶层目录下编译

这种方法,利用底层目录的build.sh,传递参数uboot进行编译

sudo ./build.sh uboot

其实利用build.sh脚本,实际上也是cd到uboot目录下,去调用make.sh脚本进行编译,因此这两种方式其实可以认为是一种,那要想弄清楚来龙去脉,就得先分析build.sh脚本

build.sh分析

直接跳到末尾,有这样一段话,首先判断是不是需要打印usage,如果不是,然后再对输入的参数,也就是$@进行遍历,并判断它是什么

例如我这样输入sudo ./build.sh uboot,在下面的case分支语句中,就会进入eval build_$option || usage,这个意思是||前能执行,就去执行,不能执行,就打印usage

#=========================
# build targets
#=========================

if echo $@|grep -wqE "help|-h"; then
        usage
        exit 0
fi

OPTIONS="$@"
for option in ${OPTIONS:-allsave}; do
	echo "processing option: $option"
	case $option in
		BoardConfig*.mk)
            option=$TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$option
            ;&  
        *.mk)
            CONF=$(realpath $option)
            echo "switching to board: $CONF"
            if [ ! -f $CONF ]; then
                echo "not exist!"
                exit 1
            fi  
			ln -sf $CONF $BOARD_CONFIG
			;;  
		buildroot|debian|distro|yocto)
            build_rootfs $option
            ;;  
		recovery)
            build_kernel
            ;&  
        *)  
            eval build_$option || usage
            ;;  
	esac
done 

再往上看,可以找到编译uboot的函数,它首先删除了一个loader什么的bin文件,据说是用于初始化ddr的,这个暂时没太想明白

然后cd到uboot的目录下,执行./make.sh rk1808,它这个参数$RK_UBOOT_DEFCONFIG通过打印可以很清楚地知道,其实就是rk1808,然后判断上一个命令的退出状态,来确定执行成功与否

接下来就是分析make.sh了

function build_uboot(){
   
        echo "============Start build uboot============"
        echo "TARGET_UBOOT_CONFIG=$RK_UBOOT_DEFCONFIG"
        echo "========================================="
        if [ -f u-boot/*_loader_*.bin ]; then
                rm u-boot/*_loader_*.bin
        fi
        cd u-boot && ./make.sh $RK_UBOOT_DEFCONFIG && cd -
        if [ $? -eq 0 ]; then
                echo "====Build uboot ok!===="
        else
                echo "====Build uboot failed!===="
                exit 1
        fi
}

make.sh

这个脚本比刚才的复杂的多,因为瑞星微的sdk是针对所有产品的,一份sdk可以编译出多款芯片的镜像文件,所以这个makefile、编译脚本等都很复杂,但是我们只要抽丝剥茧,抓住核心即可

还是老规矩,直接跳到末尾,看它调用了哪些函数

prepare
select_toolchain
select_chip_info
fixup_platform_configure
sub_commands
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值