175323eb8SJoseph Chen#!/bin/bash 275323eb8SJoseph Chen# 375323eb8SJoseph Chen# Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd 475323eb8SJoseph Chen# 575323eb8SJoseph Chen# SPDX-License-Identifier: GPL-2.0 675323eb8SJoseph Chen# 71ae3dd15SJoseph Chenset -e 875323eb8SJoseph Chen 975323eb8SJoseph Chenfunction usage() 1075323eb8SJoseph Chen{ 1175323eb8SJoseph Chen echo 1275323eb8SJoseph Chen echo "usage:" 131ae3dd15SJoseph Chen echo " $0 -f [fit/itb] -o [output]" 1475323eb8SJoseph Chen echo 1575323eb8SJoseph Chen} 1675323eb8SJoseph Chen 1775323eb8SJoseph Chenfunction args_process() 1875323eb8SJoseph Chen{ 191ae3dd15SJoseph Chen if [ $# -ne 4 -a $# -ne 2 ]; then 2075323eb8SJoseph Chen usage 2175323eb8SJoseph Chen exit 1 2275323eb8SJoseph Chen fi 2375323eb8SJoseph Chen 2475323eb8SJoseph Chen while [ $# -gt 0 ]; do 2575323eb8SJoseph Chen case $1 in 2675323eb8SJoseph Chen -f) 27*5facc6b8SJoseph Chen IMAGE=$2 2875323eb8SJoseph Chen shift 2 2975323eb8SJoseph Chen ;; 3075323eb8SJoseph Chen -o) 31*5facc6b8SJoseph Chen IMAGE_DIR=$2 3275323eb8SJoseph Chen shift 2 3375323eb8SJoseph Chen ;; 3475323eb8SJoseph Chen *) 3575323eb8SJoseph Chen usage 3675323eb8SJoseph Chen exit 1 3775323eb8SJoseph Chen ;; 3875323eb8SJoseph Chen esac 3975323eb8SJoseph Chen done 4075323eb8SJoseph Chen 41*5facc6b8SJoseph Chen if [ ! -f $IMAGE ]; then 42*5facc6b8SJoseph Chen echo "ERROR: No $IMAGE" 4375323eb8SJoseph Chen exit 1 4475323eb8SJoseph Chen fi 4575323eb8SJoseph Chen 46*5facc6b8SJoseph Chen if [ -z $IMAGE_DIR ]; then 47*5facc6b8SJoseph Chen IMAGE_DIR="out" 4875323eb8SJoseph Chen fi 4975323eb8SJoseph Chen 50*5facc6b8SJoseph Chen mkdir -p $IMAGE_DIR 5175323eb8SJoseph Chen} 5275323eb8SJoseph Chen 5375323eb8SJoseph Chenfunction gen_images() 5475323eb8SJoseph Chen{ 55*5facc6b8SJoseph Chen printf "\n# Unpack $IMAGE to directory $IMAGE_DIR/\n" 56*5facc6b8SJoseph Chen fdtget -l $IMAGE /images > $IMAGE_DIR/unpack.txt 57*5facc6b8SJoseph Chen cat $IMAGE_DIR/unpack.txt | while read line 5875323eb8SJoseph Chen do 590fb435faSJoseph Chen # generate image 60*5facc6b8SJoseph Chen NODE="/images/${line}" 61*5facc6b8SJoseph Chen NAME=`fdtget -ts $IMAGE $NODE image` 62*5facc6b8SJoseph Chen OFFS=`fdtget -ti $IMAGE $NODE data-position` 63*5facc6b8SJoseph Chen SIZE=`fdtget -ti $IMAGE $NODE data-size` 64*5facc6b8SJoseph Chen if [ -z $OFFS ]; then 651ae3dd15SJoseph Chen continue; 6675323eb8SJoseph Chen fi 671ae3dd15SJoseph Chen 68*5facc6b8SJoseph Chen if [ $SIZE -ne 0 ]; then 69*5facc6b8SJoseph Chen dd if=$IMAGE of=$IMAGE_DIR/dd.tmp bs=$OFFS skip=1 >/dev/null 2>&1 70*5facc6b8SJoseph Chen dd if=$IMAGE_DIR/dd.tmp of=$IMAGE_DIR/$NAME bs=$SIZE count=1 >/dev/null 2>&1 71*5facc6b8SJoseph Chen rm $IMAGE_DIR/dd.tmp 721ae3dd15SJoseph Chen else 73*5facc6b8SJoseph Chen touch $IMAGE_DIR/$NAME 741ae3dd15SJoseph Chen fi 750fb435faSJoseph Chen 760fb435faSJoseph Chen # hash verify 77*5facc6b8SJoseph Chen algo=`fdtget -ts $IMAGE $NODE/hash@1 algo` 780fb435faSJoseph Chen if [ -z $algo ]; then 79*5facc6b8SJoseph Chen printf " %-20s: %d bytes" $NAME $SIZE 800fb435faSJoseph Chen continue; 810fb435faSJoseph Chen fi 820fb435faSJoseph Chen 83*5facc6b8SJoseph Chen data=`fdtget -tx $IMAGE $NODE/hash@1 value` 840fb435faSJoseph Chen data=`echo " "$data | sed "s/ / 0x/g"` 85*5facc6b8SJoseph Chen csum=`"$algo"sum $IMAGE_DIR/$NAME | awk '{ print $1}'` 860fb435faSJoseph Chen 870fb435faSJoseph Chen hash="" 880fb435faSJoseph Chen for((i=1;;i++)); 890fb435faSJoseph Chen do 900fb435faSJoseph Chen hex=`echo $data | awk -v idx=$i '{ print $idx }'` 910fb435faSJoseph Chen if [ -z $hex ]; then 920fb435faSJoseph Chen break; 930fb435faSJoseph Chen fi 940fb435faSJoseph Chen 950fb435faSJoseph Chen hex=`printf "%08x" $hex` # align !! 960fb435faSJoseph Chen hash="$hash$hex" 970fb435faSJoseph Chen done 980fb435faSJoseph Chen 99*5facc6b8SJoseph Chen printf " %-20s: %d bytes... %s" $NAME $SIZE $algo 100*5facc6b8SJoseph Chen if [ "$csum" = "$hash" -o $SIZE -eq 0 ]; then 1010fb435faSJoseph Chen echo "+" 1020fb435faSJoseph Chen else 1030fb435faSJoseph Chen echo "-" 1040fb435faSJoseph Chen fi 1051ae3dd15SJoseph Chen done 1061ae3dd15SJoseph Chen 1071ae3dd15SJoseph Chen rm $output/unpack.txt 10875323eb8SJoseph Chen echo 10975323eb8SJoseph Chen} 11075323eb8SJoseph Chen 11175323eb8SJoseph Chenargs_process $* 11275323eb8SJoseph Chengen_images 1130fb435faSJoseph Chen 114