12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #! /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
|