From 0aa79daabf0a83476b838baae61c1be7a404357d Mon Sep 17 00:00:00 2001 From: blogic Date: Wed, 3 Dec 2014 20:22:37 +0000 Subject: [PATCH] procd: more nand takeover fixes 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 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43513 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/system/procd/files/nand-preinit.sh | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/package/system/procd/files/nand-preinit.sh b/package/system/procd/files/nand-preinit.sh index bd2193c928..cf596246d1 100644 --- a/package/system/procd/files/nand-preinit.sh +++ b/package/system/procd/files/nand-preinit.sh @@ -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 -- 2.11.0