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) 271ae3dd15SJoseph Chen file=$2 2875323eb8SJoseph Chen shift 2 2975323eb8SJoseph Chen ;; 3075323eb8SJoseph Chen -o) 311ae3dd15SJoseph Chen output=$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 411ae3dd15SJoseph Chen if [ ! -f $file ]; then 421ae3dd15SJoseph Chen echo "ERROR: No $file" 4375323eb8SJoseph Chen exit 1 4475323eb8SJoseph Chen fi 4575323eb8SJoseph Chen 461ae3dd15SJoseph Chen if [ -z $output ]; then 471ae3dd15SJoseph Chen output="out" 4875323eb8SJoseph Chen fi 4975323eb8SJoseph Chen 501ae3dd15SJoseph Chen mkdir -p $output 5175323eb8SJoseph Chen} 5275323eb8SJoseph Chen 5375323eb8SJoseph Chenfunction gen_images() 5475323eb8SJoseph Chen{ 55*0fb435faSJoseph Chen printf "\n# Unpack $file to directory $output/\n" 561ae3dd15SJoseph Chen fdtget -l $file /images > $output/unpack.txt 571ae3dd15SJoseph Chen cat $output/unpack.txt | while read line 5875323eb8SJoseph Chen do 59*0fb435faSJoseph Chen # generate image 601ae3dd15SJoseph Chen node="/images/${line}" 611ae3dd15SJoseph Chen name=`fdtget -ts $file $node image` 621ae3dd15SJoseph Chen offs=`fdtget -ti $file $node data-position` 631ae3dd15SJoseph Chen size=`fdtget -ti $file $node data-size` 641ae3dd15SJoseph Chen if [ -z $offs ]; then 651ae3dd15SJoseph Chen continue; 6675323eb8SJoseph Chen fi 671ae3dd15SJoseph Chen 681ae3dd15SJoseph Chen if [ $size -ne 0 ]; then 691ae3dd15SJoseph Chen dd if=$file of=$output/dd.tmp bs=$offs skip=1 >/dev/null 2>&1 701ae3dd15SJoseph Chen dd if=$output/dd.tmp of=$output/$name bs=$size count=1 >/dev/null 2>&1 711ae3dd15SJoseph Chen rm $output/dd.tmp 721ae3dd15SJoseph Chen else 731ae3dd15SJoseph Chen touch $output/$name 741ae3dd15SJoseph Chen fi 75*0fb435faSJoseph Chen 76*0fb435faSJoseph Chen # hash verify 77*0fb435faSJoseph Chen algo=`fdtget -ts $file $node/hash@1 algo` 78*0fb435faSJoseph Chen if [ -z $algo ]; then 79*0fb435faSJoseph Chen printf " %-20s: %d bytes" $name $size 80*0fb435faSJoseph Chen continue; 81*0fb435faSJoseph Chen fi 82*0fb435faSJoseph Chen 83*0fb435faSJoseph Chen data=`fdtget -tx $file $node/hash@1 value` 84*0fb435faSJoseph Chen data=`echo " "$data | sed "s/ / 0x/g"` 85*0fb435faSJoseph Chen csum=`"$algo"sum $output/$name | awk '{ print $1}'` 86*0fb435faSJoseph Chen 87*0fb435faSJoseph Chen hash="" 88*0fb435faSJoseph Chen for((i=1;;i++)); 89*0fb435faSJoseph Chen do 90*0fb435faSJoseph Chen hex=`echo $data | awk -v idx=$i '{ print $idx }'` 91*0fb435faSJoseph Chen if [ -z $hex ]; then 92*0fb435faSJoseph Chen break; 93*0fb435faSJoseph Chen fi 94*0fb435faSJoseph Chen 95*0fb435faSJoseph Chen hex=`printf "%08x" $hex` # align !! 96*0fb435faSJoseph Chen hash="$hash$hex" 97*0fb435faSJoseph Chen done 98*0fb435faSJoseph Chen 99*0fb435faSJoseph Chen printf " %-20s: %d bytes... %s" $name $size $algo 100*0fb435faSJoseph Chen if [ "$csum" = "$hash" -o $size -eq 0 ]; then 101*0fb435faSJoseph Chen echo "+" 102*0fb435faSJoseph Chen else 103*0fb435faSJoseph Chen echo "-" 104*0fb435faSJoseph 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 113*0fb435faSJoseph Chen 114