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 <blogic@openwrt.org>

SVN-Revision: 43513
owl
John Crispin 2014-12-03 20:22:37 +00:00
parent c3bb3906ee
commit 19a6f3dd11
1 changed files with 12 additions and 8 deletions

View File

@ -4,14 +4,18 @@
nand_takeover() { nand_takeover() {
. /lib/upgrade/nand.sh . /lib/upgrade/nand.sh
mtd=$(find_mtd_index "$CI_UBIPART") mtd=$(find_mtd_index "$CI_UBIPART")
local file_type="$(identify $2)" esize=$(cat /proc/mtd | grep mtd$mtd |cut -d" " -f 3)
mtd -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr [ -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) 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"')) 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" ] && { [ "$MAGIC" = "ustar" ] && {
mtd -l $((SIZE + 4)) dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar 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 nand_do_upgrade_stage2 /tmp/sysupgrade.tar
} }
done
} }
boot_hook_add initramfs nand_takeover boot_hook_add initramfs nand_takeover