diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-12-05 13:03:54 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-12-05 13:03:54 +0000 |
commit | 44a7438217323d90cc430627b82fd165fba52250 (patch) | |
tree | e7434351313cb4778b6e1a6a8342bedfe13ffbc3 /target/linux/ar71xx/base-files/lib | |
parent | 62f688b6ec4fcf21d0b5f32de8b21dfed9202c4f (diff) |
ar71xx: rewrite WNDR3700/3800 handling
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29434 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/base-files/lib')
-rwxr-xr-x | target/linux/ar71xx/base-files/lib/ar71xx.sh | 52 | ||||
-rwxr-xr-x | target/linux/ar71xx/base-files/lib/upgrade/platform.sh | 14 |
2 files changed, 49 insertions, 17 deletions
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index 02286e9aa..22e951d14 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -6,6 +6,48 @@ AR71XX_BOARD_NAME= AR71XX_MODEL= +ar71xx_get_mem_total() { + $(awk '/MemTotal:/ {print($2)}' /proc/meminfo) +} + +ar71xx_get_mtd_part_magic() { + local part="$1" + local mtd + + mtd=$(find_mtd_part $part) + [ -z "$mtd" ] && return + + dd if=$mtd bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +wndr3700_board_detect() { + local machine="$1" + local magic + local name + + name="wndr3700" + + magic="$(ar71xx_get_mtd_part_magic firmware)" + case $magic in + "33373030") + machine="NETGEAR WNDR3700" + ;; + "33373031") + local mt + + mt=$(ar71xx_get_mem_total) + if [ "$mt" -lt "65536" ]; then + machine="NETGEAR WNDR3700v2" + else + machine="NETGEAR WNDR3800" + fi + ;; + esac + + AR71XX_BOARD_NAME="$name" + AR71XX_MODEL="$machine" +} + ar71xx_board_detect() { local machine local name @@ -169,14 +211,8 @@ ar71xx_board_detect() { *WP543) name="wp543" ;; - *WNDR3700) - name="wndr3700" - ;; - *WNDR3700v2) - name="wndr3700v2" - ;; - *WNDR3800) - name="wndr3800" + *"WNDR3700/WNDR3800") + wndr3700_board_detect "$machine" ;; *WNR2000) name="wnr2000" diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index cc327e6a1..1de907715 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -127,15 +127,11 @@ platform_check_image() { return 0 ;; wndr3700) - [ "$magic_long" != "33373030" ] && { - echo "Invalid image type." - return 1 - } - return 0 - ;; - wndr3700v2|wndr3800) - [ "$magic_long" != "33373031" ] && { - echo "Invalid image type." + local hw_magic + + hw_magic="$(ar71xx_get_mtd_part_magic firmware)" + [ "$magic_long" != "$hw_magic" ] && { + echo "Invalid image, hardware ID mismatch, hw:$hw_magic image:$magic_long." return 1 } return 0 |