#!/bin/sh
#
# Firmware flasher creator for Pandora
# Copyright (c) 2010, Gražvydas Ignotas

set -e

out_dir="out/"
out_opt_dir="out_opt/"
sysf_in="in/"
rd_input="rootfs"
bootf="bootf.tgz"
rdfile=`mktemp`
rdfile_out="tmp/rd-ext2.bin"
uboot_script=${uboot_script:-"script.txt"}
boot_scr_tmp=`mktemp`
boot_scr_tmp2=`mktemp`
boot_scr_tmp_scr=`mktemp`
mkimage="tmp/mkimage"
zipfile="pandora_flasher_v.zip"

if test '!' '(' -d $rd_input -a -f ${sysf_in}x-load.bin.ift -a -f ${sysf_in}u-boot.bin \
	-a -f ${sysf_in}uImage -a -f ${sysf_in}uImage_updater ')'
then
	echo "missing input files"
	exit 1
fi

rm -rf $out_dir $out_opt_dir
mkdir $out_dir 2>/dev/null && mkdir $out_opt_dir 2>/dev/null || true


# files for SD boot
cp ${sysf_in}x-load.bin.ift ${out_opt_dir}MLO
cp ${sysf_in}u-boot.bin_updater ${out_opt_dir}u-boot.bin


# bootf.tgz
cd $sysf_in
tar czvf $bootf u-boot.bin uImage
cd ..
mv -f ${sysf_in}${bootf} ${out_dir}


# rootfs
dd if=/dev/zero of=$rdfile bs=1M count=8
mkfs.ext2 -F $rdfile 
sudo mount -o loop $rdfile /mnt/tmp
sudo cp -r $rd_input/* /mnt/tmp/
if [ -n "$more_rootfs_work" ]
then
	$more_rootfs_work
fi
sudo umount /mnt/tmp
cat $rdfile | gzip -9 > $rdfile_out
rm $rdfile


# boot.scr
dd if=/dev/zero of=$boot_scr_tmp_scr bs=1 count=4020
dd if=/dev/zero of=$boot_scr_tmp bs=4K count=800

# 000000 - 000fff: u-boot header, the script
dd if=$uboot_script of=$boot_scr_tmp_scr conv=notrunc bs=1
# 001000 - 020fff: x-load
if [ "$no_xload" != "yes" ]
then
	dd if=$rd_input/usr/local/erasednandblk of=$boot_scr_tmp conv=notrunc bs=4K
	dd if=${sysf_in}x-load.bin.ift of=$boot_scr_tmp conv=notrunc bs=4K
fi
# 021000 - 320fff: uImage
dd if=${sysf_in}uImage_updater of=$boot_scr_tmp conv=notrunc bs=4K seek=32
# 321000 - end:    ramdisk
cat $boot_scr_tmp $rdfile_out > $boot_scr_tmp2
# adjust for u-boot header
$mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "script" \
	-d $boot_scr_tmp_scr:$boot_scr_tmp2 ${out_dir}boot.scr
rm $boot_scr_tmp $boot_scr_tmp2 $boot_scr_tmp_scr

# release zip
cd ${out_dir}
zip -9 $zipfile $bootf boot.scr
mv -f $zipfile ../tmp/
cd ..
