From: Gabor Juhos Date: Wed, 7 Dec 2011 06:55:39 +0000 (+0000) Subject: ar71xx: fix WNDR3x00 model detection X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=8eb8a6e1e7cec83cbb3a3d4a7486f0e5205a1b98;p=openwrt%2Fstaging%2Fnbd.git ar71xx: fix WNDR3x00 model detection Detect the model name for /tmp/sysinfo/model based on 10 bytes at offset 56 in the art (caldata) mtd partition. r29434 redid WNDR3x00 model detection, attempting to distinguish between WNDR3700v2 and WNDR3800 by checking MemTotal in /proc/meminfo. However, it contained a bug: it put the awk inside a $(...), with the result that all WNDR3700v2 and WNDR3800 models would be reported as WNDR3800. This patch checks the model name stored in the art partition, as is done by U-Boot shipping on the WNDR3800. It has the likely advantage of working with future models based on the WNDR3700 board. It also will not mis-detect units on which people install more memory. I have tested this patch on WNDR3700 (v1), WNDR3700v2, and WNDR3800. Signed-off-by: Mark Mentovai SVN-Revision: 29472 --- diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index fa730107fa..bbd84d1703 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -6,18 +6,22 @@ AR71XX_BOARD_NAME= AR71XX_MODEL= -ar71xx_get_mem_total() { - $(awk '/MemTotal:/ {print($2)}' /proc/meminfo) -} +ar71xx_get_mtd_offset_size_format() { + local mtd="$1" + local offset="$2" + local size="$3" + local format="$4" + local dev -ar71xx_get_mtd_part_magic() { - local part="$1" - local mtd + dev=$(find_mtd_part $mtd) + [ -z "$dev" ] && return - mtd=$(find_mtd_part $part) - [ -z "$mtd" ] && return + dd if=$dev bs=1 skip=$offset count=$size 2>/dev/null | hexdump -v -e "1/1 \"$format\"" +} - dd if=$mtd bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +ar71xx_get_mtd_part_magic() { + local mtd="$1" + ar71xx_get_mtd_offset_size_format "$mtd" 0 4 %02x } wndr3700_board_detect() { @@ -33,13 +37,12 @@ wndr3700_board_detect() { machine="NETGEAR WNDR3700" ;; "33373031") - local mt - - mt=$(ar71xx_get_mem_total) - if [ "$mt" -lt "65536" ]; then + local model + model=$(ar71xx_get_mtd_offset_size_format art 56 10 %c) + if [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ]; then machine="NETGEAR WNDR3700v2" else - machine="NETGEAR WNDR3800" + machine="NETGEAR $model" fi ;; esac