procd: more nand takeover fixes
authorJohn Crispin <john@openwrt.org>
Wed, 3 Dec 2014 20:22:37 +0000 (20:22 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 3 Dec 2014 20:22:37 +0000 (20:22 +0000)
if the initramfs kernel and payload were flashed in one block, the payload might not be at the start of the ubi partition due to bad blocks inside the kernel partition.

Signed-off-by: John Crispin <blogic@openwrt.org>
SVN-Revision: 43513

package/system/procd/files/nand-preinit.sh

index bd2193c9289b23b04a88bc4eda6af8c1acfe1c62..cf596246d1f2891cbeb7b5c7cac4bb6e002b13fb 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