rv1126-uboot/scripts/fit-unpack.sh

113 lines
1.9 KiB
Bash
Raw Normal View History

#!/bin/bash
#
# Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd
#
# SPDX-License-Identifier: GPL-2.0
#
FIT_UBOOT_IMAGES=(
"/images/uboot@1 u-boot-nodtb.bin"
"/images/optee@1 tee.bin"
"/images/fdt@1 u-boot.dtb"
)
FIT_BOOT_IMAGES=(
"/images/kernel@1 kernel.img"
"/images/ramdisk@1 ramdisk.img"
"/images/resource@1 resource.img"
"/images/fdt@1 rk-kernel.dtb"
)
function usage()
{
echo
echo "usage:"
echo " $0 -f [fit/itb image] -o [output] -u // unpack uboot.fit/itb"
echo " $0 -f [fit/itb image] -o [output] -b // unpack boot.fit/itb"
echo
}
function args_process()
{
if [ $# -ne 5 ]; then
usage
exit 1
fi
while [ $# -gt 0 ]; do
case $1 in
-b|-u)
TYPE=$1
shift 1
;;
-f)
IMAGE=$2
shift 2
;;
-o)
OUTPUT=$2
shift 2
;;
*)
usage
exit 1
;;
esac
done
if [ ! -f $IMAGE ]; then
echo "ERROR: No $IMAGE"
exit 1
elif [ -z $OUTPUT ]; then
echo "ERROR: No output"
exit 1
elif [ -z $TYPE ]; then
echo "ERROR: No args -u or -b"
exit 1
fi
mkdir -p $OUTPUT
}
function copy_image()
{
LIST=$1
NODE=`echo $LIST | awk '{ print $1 }'`
NAME=`echo $LIST | awk '{ print $2 }'`
OFFS=`fdtget -ti $IMAGE $NODE data-position`
SIZE=`fdtget -ti $IMAGE $NODE data-size`
if [ -z $OFFS ]; then
echo "ERROR: No find $NODE"
exit 1
fi
printf " %-15s: %d bytes\n" $OUTPUT$NAME $SIZE
if [ $SIZE -ne 0 ]; then
dd if=$IMAGE of=$OUTPUT/dd.tmp bs=$OFFS skip=1 >/dev/null 2>&1
dd if=$OUTPUT/dd.tmp of=$OUTPUT/$NAME bs=$SIZE count=1 >/dev/null 2>&1
rm $OUTPUT/dd.tmp
else
touch $OUTPUT/$NAME
fi
}
function gen_images()
{
echo "Image:"
if [ $TYPE = "-u" ]; then
for LIST in "${FIT_UBOOT_IMAGES[@]}"
do
copy_image "$LIST"
done
elif [ $TYPE = "-k" ]; then
for LIST in "${FIT_BOOT_IMAGES[@]}"
do
copy_image "$LIST"
done
fi
echo
}
args_process $*
gen_images