mirror of https://github.com/hak5/openwrt-owl.git
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: 43513owl
parent
c3bb3906ee
commit
19a6f3dd11
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue