Author: blogic Date: 2014-12-03 21:22:37 +0100 (Wed, 03 Dec 2014) New Revision: 43513
Modified: trunk/package/system/procd/files/nand-preinit.sh Log: 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 <[email protected]> Modified: trunk/package/system/procd/files/nand-preinit.sh =================================================================== --- trunk/package/system/procd/files/nand-preinit.sh 2014-12-03 20:22:32 UTC (rev 43512) +++ trunk/package/system/procd/files/nand-preinit.sh 2014-12-03 20:22:37 UTC (rev 43513) @@ -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 _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
