1*75323eb8SJoseph Chen#!/bin/bash 2*75323eb8SJoseph Chen# 3*75323eb8SJoseph Chen# Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd 4*75323eb8SJoseph Chen# 5*75323eb8SJoseph Chen# SPDX-License-Identifier: GPL-2.0 6*75323eb8SJoseph Chen# 7*75323eb8SJoseph Chen 8*75323eb8SJoseph ChenFIT_UBOOT_IMAGES=( 9*75323eb8SJoseph Chen "/images/uboot@1 u-boot-nodtb.bin" 10*75323eb8SJoseph Chen "/images/optee@1 tee.bin" 11*75323eb8SJoseph Chen "/images/fdt@1 u-boot.dtb" 12*75323eb8SJoseph Chen) 13*75323eb8SJoseph Chen 14*75323eb8SJoseph ChenFIT_BOOT_IMAGES=( 15*75323eb8SJoseph Chen "/images/kernel@1 kernel.img" 16*75323eb8SJoseph Chen "/images/ramdisk@1 ramdisk.img" 17*75323eb8SJoseph Chen "/images/resource@1 resource.img" 18*75323eb8SJoseph Chen "/images/fdt@1 rk-kernel.dtb" 19*75323eb8SJoseph Chen) 20*75323eb8SJoseph Chen 21*75323eb8SJoseph Chenfunction usage() 22*75323eb8SJoseph Chen{ 23*75323eb8SJoseph Chen echo 24*75323eb8SJoseph Chen echo "usage:" 25*75323eb8SJoseph Chen echo " $0 -f [fit/itb image] -o [output] -u // unpack uboot.fit/itb" 26*75323eb8SJoseph Chen echo " $0 -f [fit/itb image] -o [output] -b // unpack boot.fit/itb" 27*75323eb8SJoseph Chen echo 28*75323eb8SJoseph Chen} 29*75323eb8SJoseph Chen 30*75323eb8SJoseph Chenfunction args_process() 31*75323eb8SJoseph Chen{ 32*75323eb8SJoseph Chen if [ $# -ne 5 ]; then 33*75323eb8SJoseph Chen usage 34*75323eb8SJoseph Chen exit 1 35*75323eb8SJoseph Chen fi 36*75323eb8SJoseph Chen 37*75323eb8SJoseph Chen while [ $# -gt 0 ]; do 38*75323eb8SJoseph Chen case $1 in 39*75323eb8SJoseph Chen -b|-u) 40*75323eb8SJoseph Chen TYPE=$1 41*75323eb8SJoseph Chen shift 1 42*75323eb8SJoseph Chen ;; 43*75323eb8SJoseph Chen -f) 44*75323eb8SJoseph Chen IMAGE=$2 45*75323eb8SJoseph Chen shift 2 46*75323eb8SJoseph Chen ;; 47*75323eb8SJoseph Chen -o) 48*75323eb8SJoseph Chen OUTPUT=$2 49*75323eb8SJoseph Chen shift 2 50*75323eb8SJoseph Chen ;; 51*75323eb8SJoseph Chen *) 52*75323eb8SJoseph Chen usage 53*75323eb8SJoseph Chen exit 1 54*75323eb8SJoseph Chen ;; 55*75323eb8SJoseph Chen esac 56*75323eb8SJoseph Chen done 57*75323eb8SJoseph Chen 58*75323eb8SJoseph Chen if [ ! -f $IMAGE ]; then 59*75323eb8SJoseph Chen echo "ERROR: No $IMAGE" 60*75323eb8SJoseph Chen exit 1 61*75323eb8SJoseph Chen elif [ -z $OUTPUT ]; then 62*75323eb8SJoseph Chen echo "ERROR: No output" 63*75323eb8SJoseph Chen exit 1 64*75323eb8SJoseph Chen elif [ -z $TYPE ]; then 65*75323eb8SJoseph Chen echo "ERROR: No args -u or -b" 66*75323eb8SJoseph Chen exit 1 67*75323eb8SJoseph Chen fi 68*75323eb8SJoseph Chen 69*75323eb8SJoseph Chen mkdir -p $OUTPUT 70*75323eb8SJoseph Chen} 71*75323eb8SJoseph Chen 72*75323eb8SJoseph Chenfunction copy_image() 73*75323eb8SJoseph Chen{ 74*75323eb8SJoseph Chen LIST=$1 75*75323eb8SJoseph Chen 76*75323eb8SJoseph Chen NODE=`echo $LIST | awk '{ print $1 }'` 77*75323eb8SJoseph Chen NAME=`echo $LIST | awk '{ print $2 }'` 78*75323eb8SJoseph Chen OFFS=`fdtget -ti $IMAGE $NODE data-position` 79*75323eb8SJoseph Chen SIZE=`fdtget -ti $IMAGE $NODE data-size` 80*75323eb8SJoseph Chen if [ -z $OFFS ]; then 81*75323eb8SJoseph Chen echo "ERROR: No find $NODE" 82*75323eb8SJoseph Chen exit 1 83*75323eb8SJoseph Chen fi 84*75323eb8SJoseph Chen 85*75323eb8SJoseph Chen printf " %-15s: %d bytes\n" $OUTPUT$NAME $SIZE 86*75323eb8SJoseph Chen if [ $SIZE -ne 0 ]; then 87*75323eb8SJoseph Chen dd if=$IMAGE of=$OUTPUT/dd.tmp bs=$OFFS skip=1 >/dev/null 2>&1 88*75323eb8SJoseph Chen dd if=$OUTPUT/dd.tmp of=$OUTPUT/$NAME bs=$SIZE count=1 >/dev/null 2>&1 89*75323eb8SJoseph Chen rm $OUTPUT/dd.tmp 90*75323eb8SJoseph Chen else 91*75323eb8SJoseph Chen touch $OUTPUT/$NAME 92*75323eb8SJoseph Chen fi 93*75323eb8SJoseph Chen} 94*75323eb8SJoseph Chen 95*75323eb8SJoseph Chenfunction gen_images() 96*75323eb8SJoseph Chen{ 97*75323eb8SJoseph Chen echo "Image:" 98*75323eb8SJoseph Chen if [ $TYPE = "-u" ]; then 99*75323eb8SJoseph Chen for LIST in "${FIT_UBOOT_IMAGES[@]}" 100*75323eb8SJoseph Chen do 101*75323eb8SJoseph Chen copy_image "$LIST" 102*75323eb8SJoseph Chen done 103*75323eb8SJoseph Chen elif [ $TYPE = "-k" ]; then 104*75323eb8SJoseph Chen for LIST in "${FIT_BOOT_IMAGES[@]}" 105*75323eb8SJoseph Chen do 106*75323eb8SJoseph Chen copy_image "$LIST" 107*75323eb8SJoseph Chen done 108*75323eb8SJoseph Chen fi 109*75323eb8SJoseph Chen echo 110*75323eb8SJoseph Chen} 111*75323eb8SJoseph Chen 112*75323eb8SJoseph Chenargs_process $* 113*75323eb8SJoseph Chengen_images