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# 7*1ae3dd15SJoseph Chenset -e 875323eb8SJoseph Chen 975323eb8SJoseph Chenfunction usage() 1075323eb8SJoseph Chen{ 1175323eb8SJoseph Chen echo 1275323eb8SJoseph Chen echo "usage:" 13*1ae3dd15SJoseph Chen echo " $0 -f [fit/itb] -o [output]" 1475323eb8SJoseph Chen echo 1575323eb8SJoseph Chen} 1675323eb8SJoseph Chen 1775323eb8SJoseph Chenfunction args_process() 1875323eb8SJoseph Chen{ 19*1ae3dd15SJoseph 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*1ae3dd15SJoseph Chen file=$2 2875323eb8SJoseph Chen shift 2 2975323eb8SJoseph Chen ;; 3075323eb8SJoseph Chen -o) 31*1ae3dd15SJoseph 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 41*1ae3dd15SJoseph Chen if [ ! -f $file ]; then 42*1ae3dd15SJoseph Chen echo "ERROR: No $file" 4375323eb8SJoseph Chen exit 1 4475323eb8SJoseph Chen fi 4575323eb8SJoseph Chen 46*1ae3dd15SJoseph Chen if [ -z $output ]; then 47*1ae3dd15SJoseph Chen output="out" 4875323eb8SJoseph Chen fi 4975323eb8SJoseph Chen 50*1ae3dd15SJoseph Chen mkdir -p $output 5175323eb8SJoseph Chen} 5275323eb8SJoseph Chen 5375323eb8SJoseph Chenfunction gen_images() 5475323eb8SJoseph Chen{ 55*1ae3dd15SJoseph Chen printf "\n## Unpack $file to directory $output/\n" 56*1ae3dd15SJoseph Chen fdtget -l $file /images > $output/unpack.txt 57*1ae3dd15SJoseph Chen cat $output/unpack.txt | while read line 5875323eb8SJoseph Chen do 59*1ae3dd15SJoseph Chen node="/images/${line}" 60*1ae3dd15SJoseph Chen name=`fdtget -ts $file $node image` 61*1ae3dd15SJoseph Chen offs=`fdtget -ti $file $node data-position` 62*1ae3dd15SJoseph Chen size=`fdtget -ti $file $node data-size` 63*1ae3dd15SJoseph Chen if [ -z $offs ]; then 64*1ae3dd15SJoseph Chen continue; 6575323eb8SJoseph Chen fi 66*1ae3dd15SJoseph Chen 67*1ae3dd15SJoseph Chen printf " %-15s: %d bytes\n" ${name} $size 68*1ae3dd15SJoseph Chen if [ $size -ne 0 ]; then 69*1ae3dd15SJoseph Chen dd if=$file of=$output/dd.tmp bs=$offs skip=1 >/dev/null 2>&1 70*1ae3dd15SJoseph Chen dd if=$output/dd.tmp of=$output/$name bs=$size count=1 >/dev/null 2>&1 71*1ae3dd15SJoseph Chen rm $output/dd.tmp 72*1ae3dd15SJoseph Chen else 73*1ae3dd15SJoseph Chen touch $output/$name 74*1ae3dd15SJoseph Chen fi 75*1ae3dd15SJoseph Chen done 76*1ae3dd15SJoseph Chen 77*1ae3dd15SJoseph Chen rm $output/unpack.txt 7875323eb8SJoseph Chen echo 7975323eb8SJoseph Chen} 8075323eb8SJoseph Chen 8175323eb8SJoseph Chenargs_process $* 8275323eb8SJoseph Chengen_images