ar71xx: Add TP-Link Pharos v2 board detection

Add support for detecting TP-Link Pharos v2 boards.
They use different format in product-info partition than v1 boards.

Code was written mostly by Alexander Couzens <lynxis@fe80.eu>

Signed-off-by: Robert Marko <robimarko@gmail.com>
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Adrian Schmutzler 2018-01-19 12:58:40 +01:00 committed by Matthias Schiffer
parent 65c05301c2
commit 2524febf79
No known key found for this signature in database
GPG key ID: 16EF3F64CB201D9C
2 changed files with 33 additions and 14 deletions

View file

@ -371,7 +371,7 @@ tplink_pharos_get_model_string() {
} }
tplink_pharos_board_detect() { tplink_pharos_board_detect() {
local model_string="$(tplink_pharos_get_model_string | tr -d '\r')" local model_string="$1"
local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS" local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS"
local model="${1%%\(*}" local model="${1%%\(*}"
@ -379,6 +379,14 @@ tplink_pharos_board_detect() {
AR71XX_MODEL="TP-Link $model v$2" AR71XX_MODEL="TP-Link $model v$2"
} }
tplink_pharos_v2_get_model_string() {
local part
part=$(find_mtd_part 'product-info')
[ -z "$part" ] && return 1
dd if=$part bs=1 skip=4360 count=64 2>/dev/null | tr -d '\r\0' | head -n 1
}
ar71xx_board_detect() { ar71xx_board_detect() {
local machine local machine
local name local name
@ -563,14 +571,18 @@ ar71xx_board_detect() {
;; ;;
*"CPE210/220") *"CPE210/220")
name="cpe210" name="cpe210"
tplink_pharos_board_detect tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
;;
*"CPE210 v2")
name="cpe210-v2"
tplink_pharos_board_detect "$(tplink_pharos_v2_get_model_string)"
;; ;;
*"CPE505N") *"CPE505N")
name="cpe505n" name="cpe505n"
;; ;;
*"CPE510/520") *"CPE510/520")
name="cpe510" name="cpe510"
tplink_pharos_board_detect tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
;; ;;
*"CPE830") *"CPE830")
name="cpe830" name="cpe830"
@ -671,7 +683,7 @@ ar71xx_board_detect() {
;; ;;
*"EAP120") *"EAP120")
name="eap120" name="eap120"
tplink_pharos_board_detect tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
;; ;;
*"EAP300 v2") *"EAP300 v2")
name="eap300v2" name="eap300v2"
@ -1370,11 +1382,11 @@ ar71xx_board_detect() {
;; ;;
*"WBS210") *"WBS210")
name="wbs210" name="wbs210"
tplink_pharos_board_detect tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
;; ;;
*"WBS510") *"WBS510")
name="wbs510" name="wbs510"
tplink_pharos_board_detect tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
;; ;;
"WeIO"*) "WeIO"*)
name="weio" name="weio"

View file

@ -97,10 +97,11 @@ tplink_pharos_check_support_list() {
local image="$1" local image="$1"
local offset="$2" local offset="$2"
local model="$3" local model="$3"
local trargs="$4"
# Here $image is given to dd directly instead of using get_image; # Here $image is given to dd directly instead of using get_image;
# otherwise the skip will take almost a second (as dd can't seek) # otherwise the skip will take almost a second (as dd can't seek)
dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | ( dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | tr -d "$trargs" | (
while IFS= read -r line; do while IFS= read -r line; do
[ "$line" = "$model" ] && exit 0 [ "$line" = "$model" ] && exit 0
done done
@ -110,17 +111,19 @@ tplink_pharos_check_support_list() {
} }
tplink_pharos_check_image() { tplink_pharos_check_image() {
local magic_long="$(get_magic_long "$1")" local image_magic="$(get_magic_long "$1")"
[ "$magic_long" != "7f454c46" ] && { local board_magic="$2"
echo "Invalid image magic '$magic_long'" [ "$image_magic" != "$board_magic" ] && {
echo "Invalid image magic '$image_magic'. Expected '$board_magic'."
return 1 return 1
} }
local model_string="$(tplink_pharos_get_model_string)" local model_string="$3"
local trargs="$4"
# New images have the support list at 7802888, old ones at 1511432 # New images have the support list at 7802888, old ones at 1511432
tplink_pharos_check_support_list "$1" 7802888 "$model_string" || \ tplink_pharos_check_support_list "$1" 7802888 "$model_string" "$trargs" || \
tplink_pharos_check_support_list "$1" 1511432 "$model_string" || { tplink_pharos_check_support_list "$1" 1511432 "$model_string" "$trargs" || {
echo "Unsupported image (model not in support-list)" echo "Unsupported image (model not in support-list)"
return 1 return 1
} }
@ -579,7 +582,11 @@ platform_check_image() {
eap120|\ eap120|\
wbs210|\ wbs210|\
wbs510) wbs510)
tplink_pharos_check_image "$1" && return 0 tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_get_model_string)" '' && return 0
return 1
;;
cpe210-v2)
tplink_pharos_check_image "$1" "01000000" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0
return 1 return 1
;; ;;
a40|\ a40|\