xref: /rk3399_rockchip-uboot/scripts/fit-unpack.sh (revision 1ae3dd15e96bd5c9f5a14e424eea08f1b5ebc5f9)
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