65 lines
1.7 KiB
Bash
Executable File
65 lines
1.7 KiB
Bash
Executable File
#! /bin/sh
|
|
# Copyright (C) 2008 OpenedHand Ltd.
|
|
# Contact: andrew@openedhand.com
|
|
#
|
|
# Erase the partition given in $3 (default: rootfs) and flash the contents
|
|
# of image given in $1 into the image $2.
|
|
|
|
if [ ! -r "$1" ]; then
|
|
echo "Usage: $0 <image> <destimage> [<partition>]"
|
|
exit -1
|
|
fi
|
|
|
|
uboot_offset=0
|
|
config_offset=64
|
|
kernel_offset=256
|
|
initfs_offset=1280
|
|
rootfs_offset=2304 # chinook
|
|
|
|
# This value should be selected for Diablo based firmwares
|
|
# It also require patching qemu to get proper size of flash partitions
|
|
# (by default qemu has Chinook split).
|
|
#rootfs_offset=3328 # diablo
|
|
|
|
if [ ! -e "$2" ]; then
|
|
echo "foo"
|
|
# Making an empty/erased flash image. Need a correct echo behavior.
|
|
dd if=/dev/zero of=$2 bs=268435456 count=0 seek=1
|
|
bash -c 'echo -en \\0377\\0377\\0377\\0377\\0377\\0377\\0377\\0377 > .8b'
|
|
cat .8b .8b > .16b # OOB is 16 bytes
|
|
cat .16b .16b .16b .16b .16b .16b .16b .16b > .8sec
|
|
cat .8sec .8sec .8sec .8sec .8sec .8sec .8sec .8sec > .64sec
|
|
cat .64sec .64sec .64sec .64sec .64sec .64sec .64sec .64sec > .512sec
|
|
cat .512sec .512sec .512sec .512sec > .2ksec
|
|
cat .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec .2ksec > .16k
|
|
cat .16k .16k .16k .16k .16k .16k .16k .16k > .128k
|
|
# N800 NAND is 512k sectors big
|
|
cat .128k .128k .128k .128k >> $2
|
|
rm -rf .8b .16b .8sec .64sec .512sec .2ksec .16k .128k
|
|
fi
|
|
|
|
if [ "$3" != "" ]; then
|
|
case "$3" in
|
|
config)
|
|
partition=/dev/mtd1
|
|
page=$config_offset
|
|
;;
|
|
initfs)
|
|
partition=/dev/mtd3
|
|
page=$initfs_offset
|
|
;;
|
|
rootfs)
|
|
partition=/dev/mtd4
|
|
page=$rootfs_offset
|
|
;;
|
|
*)
|
|
echo "Unknown partition $2"
|
|
exit -1
|
|
esac
|
|
else
|
|
partition=/dev/mtd4
|
|
page=$rootfs_offset
|
|
fi
|
|
|
|
dd if=$1 of=$2 conv=notrunc bs=2048 seek=$page
|