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 <mark@moxienet.com> SVN-Revision: 29472
This commit is contained in:
parent
43bd4c6ad1
commit
8eb8a6e1e7
1 changed files with 17 additions and 14 deletions
|
@ -6,18 +6,22 @@
|
||||||
AR71XX_BOARD_NAME=
|
AR71XX_BOARD_NAME=
|
||||||
AR71XX_MODEL=
|
AR71XX_MODEL=
|
||||||
|
|
||||||
ar71xx_get_mem_total() {
|
ar71xx_get_mtd_offset_size_format() {
|
||||||
$(awk '/MemTotal:/ {print($2)}' /proc/meminfo)
|
local mtd="$1"
|
||||||
|
local offset="$2"
|
||||||
|
local size="$3"
|
||||||
|
local format="$4"
|
||||||
|
local dev
|
||||||
|
|
||||||
|
dev=$(find_mtd_part $mtd)
|
||||||
|
[ -z "$dev" ] && return
|
||||||
|
|
||||||
|
dd if=$dev bs=1 skip=$offset count=$size 2>/dev/null | hexdump -v -e "1/1 \"$format\""
|
||||||
}
|
}
|
||||||
|
|
||||||
ar71xx_get_mtd_part_magic() {
|
ar71xx_get_mtd_part_magic() {
|
||||||
local part="$1"
|
local mtd="$1"
|
||||||
local mtd
|
ar71xx_get_mtd_offset_size_format "$mtd" 0 4 %02x
|
||||||
|
|
||||||
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() {
|
wndr3700_board_detect() {
|
||||||
|
@ -33,13 +37,12 @@ wndr3700_board_detect() {
|
||||||
machine="NETGEAR WNDR3700"
|
machine="NETGEAR WNDR3700"
|
||||||
;;
|
;;
|
||||||
"33373031")
|
"33373031")
|
||||||
local mt
|
local model
|
||||||
|
model=$(ar71xx_get_mtd_offset_size_format art 56 10 %c)
|
||||||
mt=$(ar71xx_get_mem_total)
|
if [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ]; then
|
||||||
if [ "$mt" -lt "65536" ]; then
|
|
||||||
machine="NETGEAR WNDR3700v2"
|
machine="NETGEAR WNDR3700v2"
|
||||||
else
|
else
|
||||||
machine="NETGEAR WNDR3800"
|
machine="NETGEAR $model"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
Loading…
Reference in a new issue