diff --git a/iopsys-brcm63xx-arm/base-files/lib/upgrade/iopsys-4-to-5-migrator.sh b/iopsys-brcm63xx-arm/base-files/lib/upgrade/iopsys-4-to-5-migrator.sh
index 4a55ef49ea1dc10a1be039ad67f0af1f54b458f9..de77f7978e06fa831a04fc1697f394d4a91974e2 100755
--- a/iopsys-brcm63xx-arm/base-files/lib/upgrade/iopsys-4-to-5-migrator.sh
+++ b/iopsys-brcm63xx-arm/base-files/lib/upgrade/iopsys-4-to-5-migrator.sh
@@ -107,7 +107,7 @@ flush_fs_cache() {
#--------------------------------------------------------------
# Raw copy of kernel in JFFS2 flash bank $1 to file $2
jffs_to_img() {
- local mtd partSize eraseSize usageSize
+ local mtd
[ -n "$1" -a -n "$2" ] || return
[ $1 -ge 0 -a $1 -le 1 ] || return
@@ -117,22 +117,7 @@ jffs_to_img() {
[ $mtd -gt 0 ] || return
[ -c "/dev/mtd${mtd}" -a -b "/dev/mtdblock${mtd}" ] || return
- # Copy the mtd to a file but leave out the last empty part due
- # to when we later rewrite it back there may be bad blocks.
- read -t 5 -s partSize <"/sys/class/mtd/mtd${mtd}/size"
- read -t 5 -s eraseSize <"/sys/class/mtd/mtd${mtd}/erasesize"
- [ -n "$partSize" -a -n "$eraseSize" ] || return
- [ $partSize -gt 0 -a $eraseSize -gt 0 ] || return
- [ $partSize -gt $eraseSize ] || return
-
- usageSize=$(tr -s "\377" <"/dev/mtd${mtd}" | wc -c) || return
- if [ $((usageSize + 2*eraseSize)) -gt $((partSize - 2*eraseSize)) ]; then
- echo "Error, peculiar usage size of mtd${mtd}: $usageSize" >&2
- return 1
- fi
-
- dd if="/dev/mtd${mtd}" bs=1k count=$((usageSize + 2*erasesize)) \
- of="$2" 2>/dev/null || return
+ nanddump --bb=skipbad -qf "$2" "/dev/mtd${mtd}" || return
return 0
}
@@ -669,12 +654,13 @@ nvram_old_seqnum() {
[ -n "$1" ] || return
[ $1 -ge 1 -a $1 -le 3 ] || return
- [ -c "/dev/mtd0ro" ] || return
+ [ -c "/dev/mtd0" ] || return
offs=$((mtdEbSz * $1))
- dd if="/dev/mtd0ro" bs=1 skip=$((offs + 8)) \
- count=4 2>/dev/null | hexdump -ve \"0x%8.8x\"
+ nanddump --bb=padbad -qa -l $mtdEbSz -s $offs "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 skip=8 count=4 2>/dev/null | \
+ hexdump -ve \"0x%8.8x\" # The tee is for circumventing a broken pipe.
}
@@ -684,25 +670,26 @@ nvram_old_seqnum() {
# format at index $1 is valid.
# $1 = index from 0 to 3.
is_nvram_old_valid() {
- local offs offsCrc crc1 crc2
+ local offsEb offsSub crc1 crc2
[ -n "$1" ] || return
[ $1 -ge 0 -a $1 -le 3 ] || return
- [ -c "/dev/mtd0ro" ] || return
+ [ -c "/dev/mtd0" ] || return
if [ $1 -eq 0 ]; then
# nvram embedded into cferom for Broadcom ARM Gen2.
- offs=$((mtdEbSz / 2 + 0x580))
- offsCrc=0
+ offsEb=0
+ offsSub=$((mtdEbSz / 2 + 0x580))
else
- offs=$((mtdEbSz * $1))
- offsCrc=16
+ offsEb=$((mtdEbSz * $1))
+ offsSub=16
fi
if [ $1 -ge 1 ]; then
# Magic identifier?
- dd if="/dev/mtd0ro" bs=1 skip=$((offs + 0)) count=6 2>/dev/null | \
- strings -n 4 | grep -qEi "^NVRAM$" || return
+ nanddump --bb=padbad -qa -l $mtdEbSz -s $offsEb "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 count=6 2>/dev/null | strings -n 4 | \
+ grep -qEi "^NVRAM$" || return # The tee is for circumventing a broken pipe.
# Sequence number OK?
nvram_old_seqnum $1 >/dev/null || return
@@ -710,12 +697,14 @@ is_nvram_old_valid() {
fi
# Checksum?
- dd if="/dev/mtd0ro" bs=1 skip=$((offs + offsCrc)) \
- count=1020 2>/dev/null >"/tmp/iopmigr-nvram-crc" || return
- head -c 4 "/dev/zero" >>"/tmp/iopmigr-nvram-crc" || return
+ nanddump --bb=padbad -qa -l $mtdEbSz -s $offsEb "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 skip=$offsSub count=1020 \
+ 2>/dev/null >"/tmp/iopmigr-nvram-crc" || return
+ echo -ne "\x00\x00\x00\x00" >>"/tmp/iopmigr-nvram-crc" || return
crc1=$(ubicrc32 "/tmp/iopmigr-nvram-crc") || return
- crc2=$(dd if="/dev/mtd0ro" bs=1 skip=$((offs + offsCrc + 1020)) \
- count=4 2>/dev/null | hexdump -ve \"0x%8.8x\\n\") || return
+ crc2=$(nanddump --bb=padbad -qa -l $mtdEbSz -s $offsEb "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 skip=$((offsSub + 1020)) count=4 2>/dev/null | \
+ hexdump -ve \"0x%8.8x\\n\") || return
[ $((crc1)) -eq $((crc2)) ]
}
@@ -730,17 +719,19 @@ is_nvram_mirror_valid() {
[ -n "$1" ] || return
[ $1 -ge 1 -a $1 -le 3 ] || return
- [ -c "/dev/mtd0ro" ] || return
+ [ -c "/dev/mtd0" ] || return
offs=$((mtdEbSz * $1))
# Checksum?
- dd if="/dev/mtd0ro" bs=1 skip=$((offs)) \
- count=1020 2>/dev/null >"/tmp/iopmigr-nvram-crc" || return
- head -c 4 "/dev/zero" >>"/tmp/iopmigr-nvram-crc" || return
+ nanddump --bb=padbad -qa -l $mtdEbSz -s $offs "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 count=1020 2>/dev/null \
+ >"/tmp/iopmigr-nvram-crc" || return
+ echo -ne "\x00\x00\x00\x00" >>"/tmp/iopmigr-nvram-crc" || return
crc1=$(ubicrc32 "/tmp/iopmigr-nvram-crc") || return
- crc2=$(dd if="/dev/mtd0ro" bs=1 skip=$((offs + 1020)) \
- count=4 2>/dev/null | hexdump -ve \"0x%8.8x\\n\") || return
+ crc2=$(nanddump --bb=padbad -qa -l $mtdEbSz -s $offs "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 skip=1020 count=4 2>/dev/null | \
+ hexdump -ve \"0x%8.8x\\n\") || return
[ $((crc1)) -eq $((crc2)) ]
}
@@ -788,7 +779,7 @@ nvram_old_freshest() {
# to Broadcom nvram mirror format. As used in
# Iopsys v5.
nvram_old_convert() {
- local seqn offs i
+ local offs i offsEb offsSub
for i in 1 2 3; do
if ! is_nvram_old_valid $i && is_nvram_mirror_valid $i; then
@@ -798,25 +789,28 @@ nvram_old_convert() {
done
# Find most up to date copy of old nvram.
- seqn=$(nvram_old_freshest) || return
- [ -n "$seqn" ] || return
+ i=$(nvram_old_freshest) || return
+ [ -n "$i" ] || return
# Set offset in flash depending of nvram index.
- if [ $seqn -eq 0 ]; then
+ if [ $i -eq 0 ]; then
# nvram embedded into cferom for Broadcom ARM Gen2.
- offs=$((mtdEbSz / 2 + 0x580))
- elif [ $seqn -ge 1 -a $seqn -le 3 ]; then
+ offsEb=0
+ offsSub=$((mtdEbSz / 2 + 0x580))
+ elif [ $i -ge 1 -a $i -le 3 ]; then
# Iopsys v4 format.
- offs=$((mtdEbSz * seqn + 16))
+ offsEb=$((mtdEbSz * $i))
+ offsSub=16
else
return 1
fi
- echo "NVRAM converting from $seqn..."
+ echo "NVRAM converting from $i..."
# Convert it into Broadcom nvram mirror format.
[ $mtdEbSz -gt 32768 ] || return
- dd if="/dev/mtd0ro" bs=1 skip=$((offs)) \
- count=1024 2>/dev/null >"/tmp/iopmigr-nvram-conv" || return
+ nanddump --bb=padbad -qa -l $mtdEbSz -s $offsEb "/dev/mtd0" | \
+ tee /dev/null | dd bs=1 skip=$offsSub count=1024 \
+ 2>/dev/null >"/tmp/iopmigr-nvram-conv" || return
head -c $((mtdEbSz - 1024)) "/dev/zero" | \
tr "\000" "\377" >>"/tmp/iopmigr-nvram-conv"