procd: more nand takeover fixes
[openwrt.git] / package / system / procd / files / nand-preinit.sh
index bd2193c..cf59624 100644 (file)
@@ -4,14 +4,18 @@
 nand_takeover() {
        . /lib/upgrade/nand.sh
        mtd=$(find_mtd_index "$CI_UBIPART")
-       local file_type="$(identify $2)"
-       mtd -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr
-       MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null)
-       SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"'))
-       [ "$MAGIC" = "ustar" ] && {
-               mtd -l $((SIZE + 4))  dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar
-               nand_do_upgrade_stage2 /tmp/sysupgrade.tar
-       }
+       esize=$(cat /proc/mtd | grep mtd$mtd |cut -d" " -f 3)
+       [ -z "$esize" ] && return 1
+       esize=$(printf "%d" 0x$esize)
+       for a in `seq 0 64`; do
+               mtd -o $((a * esize)) -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr
+               MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null)
+               SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"'))
+               [ "$MAGIC" = "ustar" ] && {
+                       mtd -o $((a * esize)) -l $((SIZE + 4)) dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar
+                       nand_do_upgrade_stage2 /tmp/sysupgrade.tar
+               }
+       done
 }
 
 boot_hook_add initramfs nand_takeover