3 # Copyright (C) 2012 OpenWrt.org
11 local first dev size erasesize name
12 while read dev size erasesize name
; do
13 name
=${name#'"'}; name
=${name%'"'}
14 if [ "$name" = "$part_name" ]; then
24 dd bs
=1 count
=2 skip
=$pos if=$mtddev 2>/dev
/null |
hexdump -v -n 4 -e '1/1 "%02x"'
27 dir825b_is_caldata_valid
() {
31 magic
=$
(get_magic_at
$mtddev 4096)
32 [ "$magic" != "a55a" ] && return 0
34 magic
=$
(get_magic_at
$mtddev 20480)
35 [ "$magic" != "a55a" ] && return 0
40 dir825b_copy_caldata
() {
48 mtd_src
=$
(find_mtd_part
$cal_src)
49 [ -z "$mtd_src" ] && {
50 echo "no $cal_src partition found"
54 mtd_dst
=$
(find_mtd_part
$cal_dst)
55 [ -z "$mtd_dst" ] && {
56 echo "no $cal_dst partition found"
60 dir825b_is_caldata_valid
"$mtd_src" && {
61 echo "no valid calibration data found in $cal_src"
65 dir825b_is_caldata_valid
"$mtd_dst" && {
66 echo "Copying calibration data from $cal_src to $cal_dst..."
67 dd if="$mtd_src" 2>/dev
/null | mtd
-q -q write - "$cal_dst"
70 md5_src
=$
(md5sum "$mtd_src") && md5_src
="${md5_src%% *}"
71 md5_dst
=$
(md5sum "$mtd_dst") && md5_dst
="${md5_dst%% *}"
73 [ "$md5_src" != "$md5_dst" ] && {
74 echo "calibration data mismatch $cal_src:$md5_src $cal_dst:$md5_dst"
81 dir825b_do_upgrade_combined
() {
84 local fw_mtd
=$
(find_mtd_part
$fw_part)
85 local fw_length
=0x$
(dd if="$fw_file" bs
=2 skip
=1 count
=4 2>/dev
/null
)
86 local fw_blocks
=$
(($fw_length / 65536))
88 if [ -n "$fw_mtd" ] && [ ${fw_blocks:-0} -gt 0 ]; then
90 [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append
="-j $CONF_TAR"
93 dd if="$fw_file" bs
=64k skip
=1 count
=$fw_blocks 2>/dev
/null | \
94 mtd
$append write - "$fw_part"
98 dir825b_check_image
() {
99 local magic
="$(get_magic_long "$1")"
100 local fw_mtd
=$
(find_mtd_part
"firmware_orig")
106 local md5_img
=$
(dd if="$1" bs
=2 skip
=9 count
=16 2>/dev
/null
)
107 local md5_chk
=$
(dd if="$1" bs
=64k skip
=1 2>/dev
/null |
md5sum -); md5_chk
="${md5_chk%% *}"
108 local fw_len
=$
(dd if="$1" bs
=2 skip
=1 count
=4 2>/dev
/null
)
109 local fw_part_len
=$
(get_mtd_part_size
"firmware")
111 if [ -z "$fw_mtd" ]; then
112 ask_bool
0 "Do you have a backup of the caldata partition?" ||
{
113 echo "Warning, please make sure that you have a backup of the caldata partition."
114 echo "Once you have that, use 'sysupgrade -i' for upgrading to the 'fat' firmware."
119 if [ -z "$md5_img" -o -z "$md5_chk" ]; then
120 echo "Unable to get image checksums. Maybe you are using a streamed image?"
124 if [ "$md5_img" != "$md5_chk" ]; then
125 echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)"
129 fw_len
=$
((0x
$fw_len))
130 fw_part_len
=${fw_part_len:-0}
132 if [ $fw_part_len -lt $fw_len ]; then
133 echo "The upgrade image is too big (size:$fw_len available:$fw_part_len)"
138 echo "Unsupported image format."
146 platform_do_upgrade_dir825b
() {
147 local magic
="$(get_magic_long "$1")"
148 local fw_mtd
=$
(find_mtd_part
"firmware_orig")
152 if [ -n "$fw_mtd" ]; then
153 # restore calibration data before downgrading to
155 dir825b_copy_caldata
"caldata" "caldata_orig" ||
{
156 echo "unable to restore calibration data"
159 PART_NAME
="firmware_orig"
163 default_do_upgrade
"$ARGV"
166 if [ -z "$fw_mtd" ]; then
167 # backup calibration data before upgrading to the
169 dir825b_copy_caldata
"caldata" "caldata_copy" ||
{
170 echo "unable to backup calibration data"
174 dir825b_do_upgrade_combined
"firmware" "$ARGV"