openwrtv4/package/system/procd/files/nand-preinit.sh
John Crispin 19a6f3dd11 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
2014-12-03 20:22:37 +00:00

21 lines
740 B
Bash

#!/bin/sh
# Copyright (C) 2014 OpenWrt.org
nand_takeover() {
. /lib/upgrade/nand.sh
mtd=$(find_mtd_index "$CI_UBIPART")
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