X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Far71xx%2Fbase-files%2Flib%2Fupgrade%2Fplatform.sh;h=cf2aab2737b274c072caee515c62d557c6b26cfb;hb=e39dc8d823c86559eedbbdcee5f5c14b827fed0f;hp=3ff8e172b0cc0429c87d871a0d1dfc9c9aa08f94;hpb=8be47007a90d82baaac8b1b1aa5ffcbb18ebbe67;p=openwrt%2Fopenwrt.git diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 3ff8e172b0..cf2aab2737 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -7,10 +7,13 @@ PART_NAME=firmware RAMFS_COPY_DATA=/lib/ar71xx.sh +[ -x /usr/sbin/nandwrite ] && RAMFS_COPY_BIN=/usr/sbin/nandwrite CI_BLKSZ=65536 CI_LDADR=0x80060000 +PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=0 + platform_find_partitions() { local first dev size erasesize name while read dev size erasesize name; do @@ -40,6 +43,13 @@ platform_find_kernelpart() { done } +platform_find_rootfspart() { + local part + for part in "${1%:*}" "${1#*:}"; do + [ "$part" != "$2" ] && echo "$part"; break + done +} + platform_do_upgrade_combined() { local partitions=$(platform_find_partitions) local kernelpart=$(platform_find_kernelpart "${partitions#*:}") @@ -53,13 +63,22 @@ platform_do_upgrade_combined() { [ ${root_blocks:-0} -gt 0 ] && \ [ ${erase_size:-0} -gt 0 ]; then + local rootfspart=$(platform_find_rootfspart "$partitions" "$kernelpart") local append="" [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR" - ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \ - dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \ - mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions + if [ "$PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD" -ne 1 ]; then + ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \ + dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \ + mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions + elif [ -n "$rootfspart" ]; then + dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null | \ + mtd write - $kernelpart + dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null | \ + mtd -r $append write - $rootfspart + fi fi + PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=0 } tplink_get_image_hwid() { @@ -105,6 +124,10 @@ seama_get_type_magic() { get_image "$@" | dd bs=1 count=4 skip=53 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' } +wrgg_get_image_magic() { + get_image "$@" | dd bs=4 count=1 skip=8 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + cybertan_get_image_magic() { get_image "$@" | dd bs=8 count=1 skip=0 2>/dev/null | hexdump -v -n 8 -e '1/1 "%02x"' } @@ -160,6 +183,15 @@ alfa_check_image() { return 0 } +platform_nand_board_name() { + local board=$(ar71xx_board_name) + + case "$board" in + rb*) echo "routerboard";; + *) echo "$board";; + esac +} + platform_check_image() { local board=$(ar71xx_board_name) local magic="$(get_magic_word "$1")" @@ -168,55 +200,24 @@ platform_check_image() { [ "$#" -gt 1 ] && return 1 case "$board" in - all0258n|\ - all0315n|\ - cap324|\ - cap4200ag|\ - cr3000|\ - cr5000) - platform_check_image_allnet "$1" && return 0 - return 1 - ;; - alfa-ap96|\ - alfa-nx|\ - ap113|\ - ap121-mini|\ - ap121|\ - ap135-020|\ - ap136-010|\ - ap136-020|\ - ap147-010|\ - ap152|\ - ap96|\ - arduino-yun|\ - bxu2000n-2-a1|\ - db120|\ - dr344|\ - f9k1115v2|\ - hornet-ub|\ - mr12|\ - mr16|\ - wpj558|\ - zbt-we1526|\ - zcn-1523h-2|\ - zcn-1523h-5) - [ "$magic_long" != "68737173" -a "$magic_long" != "19852003" ] && { - echo "Invalid image type." - return 1 - } - - return 0 - ;; airgatewaypro|\ airgateway|\ airrouter|\ ap132|\ - ap81|\ - ap83|\ + ap90q|\ + archer-c59-v1|\ + archer-c60-v1|\ bullet-m|\ c-55|\ carambola2|\ cf-e316n-v2|\ + cf-e320n-v2|\ + cf-e380ac-v1|\ + cf-e380ac-v2|\ + cf-e520n|\ + cf-e530n|\ + cpe830|\ + cpe870|\ dgl-5500-a1|\ dhp-1565-a1|\ dir-505-a1|\ @@ -251,10 +252,15 @@ platform_check_image() { nanostation-m-xw|\ nanostation-m|\ nbg460n_550n_550nh|\ + pqi-air-pen|\ rocket-m-ti|\ rocket-m-xw|\ rocket-m|\ rw2458n|\ + sc1750|\ + sc300m|\ + sc450|\ + sr3200|\ tew-632brp|\ tew-712br|\ tew-732br|\ @@ -278,7 +284,8 @@ platform_check_image() { wzr-hp-ag300h|\ wzr-hp-g300nh2|\ wzr-hp-g300nh|\ - wzr-hp-g450h) + wzr-hp-g450h|\ + xd3200) [ "$magic" != "2705" ] && { echo "Invalid image type." return 1 @@ -286,56 +293,77 @@ platform_check_image() { return 0 ;; - cpe210|\ - cpe510) - tplink_pharos_check_image "$1" && return 0 - return 1 - ;; - bsb|\ - dir-825-b1|\ - tew-673gru) - dir825b_check_image "$1" && return 0 + alfa-ap96|\ + alfa-nx|\ + ap121-mini|\ + ap121|\ + ap135-020|\ + ap136-010|\ + ap136-020|\ + ap147-010|\ + ap152|\ + ap96|\ + arduino-yun|\ + bhr-4grv2|\ + bxu2000n-2-a1|\ + db120|\ + dr344|\ + dw33d|\ + f9k1115v2|\ + hornet-ub|\ + mr12|\ + mr16|\ + wpj558|\ + zbt-we1526|\ + zcn-1523h-2|\ + zcn-1523h-5) + [ "$magic_long" != "68737173" -a "$magic_long" != "19852003" ] && { + echo "Invalid image type." + return 1 + } + + return 0 ;; - mynet-rext|\ - wrt160nl) - cybertan_check_image "$1" && return 0 + all0258n|\ + all0315n|\ + cap324|\ + cap4200ag|\ + cr3000|\ + cr5000) + platform_check_image_allnet "$1" && return 0 return 1 ;; - mynet-n600|\ - mynet-n750|\ - qihoo-c301) - [ "$magic_long" != "5ea3a417" ] && { - echo "Invalid image, bad magic: $magic_long" + all0305|\ + eap300v2|\ + eap7660d|\ + ja76pf2|\ + ja76pf|\ + jwap003|\ + ls-sr71|\ + pb42|\ + pb44|\ + rb-941-2nd|\ + routerstation-pro|\ + routerstation|\ + wp543|\ + wpe72) + [ "$magic" != "4349" ] && { + echo "Invalid image. Use *-sysupgrade.bin files on this board" return 1 } - local typemagic=$(seama_get_type_magic "$1") - [ "$typemagic" != "6669726d" ] && { - echo "Invalid image, bad type: $typemagic" + local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null) + local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}" + + if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then + return 0 + else + echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)" return 1 - } + fi return 0 ;; - mr1750v2|\ - mr1750|\ - mr600v2|\ - mr600|\ - mr900v2|\ - mr900|\ - om2p-hsv2|\ - om2p-hsv3|\ - om2p-hs|\ - om2p-lc|\ - om2pv2|\ - om2p|\ - om5p-acv2|\ - om5p-ac|\ - om5p-an|\ - om5p) - platform_check_image_openmesh "$magic_long" "$1" && return 0 - return 1 - ;; antminer-s1|\ antminer-s3|\ antrouter-r1|\ @@ -350,6 +378,7 @@ platform_check_image() { omy-x1|\ onion-omega|\ oolite|\ + re450|\ smart-300|\ som9331|\ tellstick-znet-lite|\ @@ -369,6 +398,7 @@ platform_check_image() { tl-wa750re|\ tl-wa7510n|\ tl-wa801nd-v2|\ + tl-wa801nd-v3|\ tl-wa830re-v2|\ tl-wa850re|\ tl-wa860re|\ @@ -381,8 +411,10 @@ platform_check_image() { tl-wdr4300|\ tl-wdr4900-v2|\ tl-wdr6500-v2|\ + tl-wpa8630|\ tl-wr1041n-v2|\ tl-wr1043nd-v2|\ + tl-wr1043nd-v4|\ tl-wr1043nd|\ tl-wr2543n|\ tl-wr703n|\ @@ -390,6 +422,7 @@ platform_check_image() { tl-wr720n-v3|\ tl-wr741nd-v4|\ tl-wr741nd|\ + tl-wr802n-v1|\ tl-wr810n|\ tl-wr841n-v11|\ tl-wr841n-v1|\ @@ -400,6 +433,7 @@ platform_check_image() { tl-wr842n-v3|\ tl-wr941nd-v5|\ tl-wr941nd-v6|\ + tl-wr940n-v4|\ tl-wr941nd) local magic_ver="0100" @@ -439,8 +473,76 @@ platform_check_image() { return 0 ;; - tube2h) - alfa_check_image "$1" && return 0 + bsb|\ + dir-825-b1|\ + tew-673gru) + dir825b_check_image "$1" && return 0 + ;; + rb*) + nand_do_platform_check routerboard $1 + return $? + ;; + c-60|\ + nbg6716|\ + r6100|\ + wndr3700v4|\ + wndr4300) + nand_do_platform_check $board $1 + return $? + ;; + cpe210|\ + cpe510|\ + eap120|\ + wbs210|\ + wbs510) + tplink_pharos_check_image "$1" && return 0 + return 1 + ;; + mr1750v2|\ + mr1750|\ + mr600v2|\ + mr600|\ + mr900v2|\ + mr900|\ + om2p-hsv2|\ + om2p-hsv3|\ + om2p-hs|\ + om2p-lc|\ + om2pv2|\ + om2p|\ + om5p-acv2|\ + om5p-ac|\ + om5p-an|\ + om5p) + platform_check_image_openmesh "$magic_long" "$1" && return 0 + return 1 + ;; + mr18|\ + z1) + merakinand_do_platform_check $board $1 + return $? + ;; + dir-869-a1|\ + mynet-n600|\ + mynet-n750|\ + qihoo-c301) + [ "$magic_long" != "5ea3a417" ] && { + echo "Invalid image, bad magic: $magic_long" + return 1 + } + + local typemagic=$(seama_get_type_magic "$1") + [ "$typemagic" != "6669726d" ] && { + echo "Invalid image, bad type: $typemagic" + return 1 + } + + return 0 + ;; + e2100l|\ + mynet-rext|\ + wrt160nl) + cybertan_check_image "$1" && return 0 return 1 ;; nbg6616|\ @@ -453,6 +555,10 @@ platform_check_image() { return 0 ;; + tube2h) + alfa_check_image "$1" && return 0 + return 1 + ;; wndr3700|\ wnr1000-v2|\ wnr2000-v3|\ @@ -466,48 +572,6 @@ platform_check_image() { return 1 } - return 0 - ;; - mr18|\ - z1) - merakinand_do_platform_check $board $1 - return $? - ;; - nbg6716|\ - r6100|\ - wndr3700v4|\ - wndr4300) - nand_do_platform_check $board $1 - return $? - ;; - all0305|\ - eap300v2|\ - eap7660d|\ - ja76pf2|\ - ja76pf|\ - jwap003|\ - ls-sr71|\ - pb42|\ - pb44|\ - routerstation-pro|\ - routerstation|\ - wp543|\ - wpe72) - [ "$magic" != "4349" ] && { - echo "Invalid image. Use *-sysupgrade.bin files on this board" - return 1 - } - - local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null) - local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}" - - if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then - return 0 - else - echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)" - return 1 - fi - return 0 ;; wnr2000-v4) @@ -526,6 +590,15 @@ platform_check_image() { return 0 ;; + dap-2695-a1) + local magic=$(wrgg_get_image_magic "$1") + [ "$magic" != "21030820" ] && { + echo "Invalid image, bad type: $magic" + return 1 + } + + return 0; + ;; esac echo "Sysupgrade is not yet supported on $board." @@ -536,6 +609,10 @@ platform_pre_upgrade() { local board=$(ar71xx_board_name) case "$board" in + rb-941-2nd) + ;; + rb*|\ + c-60|\ nbg6716|\ r6100|\ wndr3700v4|\ @@ -549,10 +626,32 @@ platform_pre_upgrade() { esac } +platform_nand_pre_upgrade() { + local board=$(ar71xx_board_name) + + case "$board" in + rb*) + CI_KERNPART=none + local fw_mtd=$(find_mtd_part kernel) + fw_mtd="${fw_mtd/block/}" + [ -n "$fw_mtd" ] || return + mtd erase kernel + tar xf "$1" sysupgrade-routerboard/kernel -O | nandwrite -o "$fw_mtd" - + ;; + esac +} + platform_do_upgrade() { local board=$(ar71xx_board_name) case "$board" in + rb-941-2nd) + PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=1 + platform_do_upgrade_combined "$ARGV" + ;; + all0258n) + platform_do_upgrade_allnet "0x9f050000" "$ARGV" + ;; all0305|\ eap7660d|\ ja76pf2|\ @@ -565,13 +664,6 @@ platform_do_upgrade() { routerstation) platform_do_upgrade_combined "$ARGV" ;; - wp543|\ - wpe72) - platform_do_upgrade_compex "$ARGV" - ;; - all0258n) - platform_do_upgrade_allnet "0x9f050000" "$ARGV" - ;; all0315n) platform_do_upgrade_allnet "0x9f080000" "$ARGV" ;; @@ -606,6 +698,10 @@ platform_do_upgrade() { MTD_CONFIG_ARGS="-s 0x180000" default_do_upgrade "$ARGV" ;; + wp543|\ + wpe72) + platform_do_upgrade_compex "$ARGV" + ;; *) default_do_upgrade "$ARGV" ;;