source: trunk/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @ 29662

Last change on this file since 29662 was 29662, checked in by juhosg, 5 years ago

ar71xx: add inital support for the ALFA Network AP96 board

The microSD slot and the Real Time Clock is not working yet.
The miniPCIe interface is not tested due to the lack of a
suitable card.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.6 KB
Line 
1#
2# Copyright (C) 2011 OpenWrt.org
3#
4
5. /lib/ar71xx.sh
6
7PART_NAME=firmware
8RAMFS_COPY_DATA=/lib/ar71xx.sh
9
10CI_BLKSZ=65536
11CI_LDADR=0x80060000
12
13platform_find_partitions() {
14        local first dev size erasesize name
15        while read dev size erasesize name; do
16                name=${name#'"'}; name=${name%'"'}
17                case "$name" in
18                        vmlinux.bin.l7|vmlinux|kernel|linux|rootfs)
19                                if [ -z "$first" ]; then
20                                        first="$name"
21                                else
22                                        echo "$erasesize:$first:$name"
23                                        break
24                                fi
25                        ;;
26                esac
27        done < /proc/mtd
28}
29
30platform_find_kernelpart() {
31        local part
32        for part in "${1%:*}" "${1#*:}"; do
33                case "$part" in
34                        vmlinux.bin.l7|vmlinux|kernel|linux)
35                                echo "$part"
36                                break
37                        ;;
38                esac
39        done
40}
41
42platform_do_upgrade_combined() {
43        local partitions=$(platform_find_partitions)
44        local kernelpart=$(platform_find_kernelpart "${partitions#*:}")
45        local erase_size=$((0x${partitions%%:*})); partitions="${partitions#*:}"
46        local kern_length=0x$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null)
47        local kern_blocks=$(($kern_length / $CI_BLKSZ))
48        local root_blocks=$((0x$(dd if="$1" bs=2 skip=5 count=4 2>/dev/null) / $CI_BLKSZ))
49
50        if [ -n "$partitions" ] && [ -n "$kernelpart" ] && \
51           [ ${kern_blocks:-0} -gt 0 ] && \
52           [ ${root_blocks:-0} -gt ${kern_blocks:-0} ] && \
53           [ ${erase_size:-0} -gt 0 ];
54        then
55                local append=""
56                [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
57
58                ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \
59                  dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \
60                        mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions
61        fi
62}
63
64tplink_get_image_hwid() {
65        get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
66}
67
68platform_check_image() {
69        local board=$(ar71xx_board_name)
70        local magic="$(get_magic_word "$1")"
71        local magic_long="$(get_magic_long "$1")"
72
73        [ "$ARGC" -gt 1 ] && return 1
74
75        case "$board" in
76        all0258n )
77                platform_check_image_all0258n "$1" && return 0
78                return 1
79                ;;
80        alfa-ap96 | \
81        alfa-nx | \
82        ap121 | \
83        ap121-mini | \
84        ap96 | \
85        db120 | \
86        hornet-ub | \
87        zcn-1523h-2 | \
88        zcn-1523h-5)
89                [ "$magic_long" != "68737173" -a "$magic_long" != "19852003" ] && {
90                        echo "Invalid image type."
91                        return 1
92                }
93                return 0
94                ;;
95        ap81 | \
96        ap83 | \
97        dir-600-a1 | \
98        dir-615-c1 | \
99        dir-825-b1 | \
100        mzk-w04nu | \
101        mzk-w300nh | \
102        tew-632brp | \
103        wrt400n | \
104        airrouter | \
105        bullet-m | \
106        nanostation-m | \
107        rocket-m | \
108        wzr-hp-g300nh2 | \
109        wzr-hp-g300nh | \
110        wzr-hp-g450h | \
111        wzr-hp-ag300h | \
112        whr-g301n | \
113        whr-hp-g300n | \
114        whr-hp-gn | \
115        nbg460n_550n_550nh | \
116        unifi )
117                [ "$magic" != "2705" ] && {
118                        echo "Invalid image type."
119                        return 1
120                }
121                return 0
122                ;;
123        tl-mr3020 | \
124        tl-mr3220 | \
125        tl-mr3420 | \
126        tl-wa901nd | \
127        tl-wa901nd-v2 | \
128        tl-wr703n | \
129        tl-wr741nd | \
130        tl-wr741nd-v4 | \
131        tl-wr841n-v1 | \
132        tl-wr941nd | \
133        tl-wr1043nd)
134                [ "$magic" != "0100" ] && {
135                        echo "Invalid image type."
136                        return 1
137                }
138
139                local hwid
140                local imageid
141
142                hwid=$(tplink_get_hwid)
143                imageid=$(tplink_get_image_hwid "$1")
144
145                [ "$hwid" != "$imageid" ] && {
146                        echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
147                        return 1
148                }
149
150                return 0
151                ;;
152        wndr3700)
153                local hw_magic
154
155                hw_magic="$(ar71xx_get_mtd_part_magic firmware)"
156                [ "$magic_long" != "$hw_magic" ] && {
157                        echo "Invalid image, hardware ID mismatch, hw:$hw_magic image:$magic_long."
158                        return 1
159                }
160                return 0
161                ;;
162        wrt160nl)
163                [ "$magic" != "4e4c" ] && {
164                        echo "Invalid image type."
165                        return 1
166                }
167                return 0
168                ;;
169        routerstation | \
170        routerstation-pro | \
171        ls-sr71 | \
172        pb42 | \
173        pb44 | \
174        eap7660d | \
175        ja76pf )
176                [ "$magic" != "4349" ] && {
177                        echo "Invalid image. Use *-sysupgrade.bin files on this board"
178                        return 1
179                }
180
181                local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null)
182                local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}"
183
184                if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then
185                        return 0
186                else
187                        echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)"
188                        return 1
189                fi
190                return 0
191                ;;
192        esac
193
194        echo "Sysupgrade is not yet supported on $board."
195        return 1
196}
197
198platform_do_upgrade() {
199        local board=$(ar71xx_board_name)
200
201        case "$board" in
202        routerstation | \
203        routerstation-pro | \
204        ls-sr71 | \
205        eap7660d | \
206        pb42 | \
207        pb44 | \
208        ja76pf)
209                platform_do_upgrade_combined "$ARGV"
210                ;;
211        all0258n )
212                platform_do_upgrade_all0258n "$ARGV"
213                ;;
214        *)
215                default_do_upgrade "$ARGV"
216                ;;
217        esac
218}
219
220disable_watchdog() {
221        killall watchdog
222        ( ps | grep -v 'grep' | grep '/dev/watchdog' ) && {
223                echo 'Could not disable watchdog'
224                return 1
225        }
226}
227
228append sysupgrade_pre_upgrade disable_watchdog
Note: See TracBrowser for help on using the repository browser.