From 4da13625d5e60842dac6ca274bc95258b4d2f2e2 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Thu, 21 Feb 2013 19:20:34 +0000 Subject: mpc85xx: add user-space support for the TL-WDR4900 v1 Signed-off-by: Gabor Juhos SVN-Revision: 35733 --- target/linux/mpc85xx/base-files/lib/mpc85xx.sh | 39 ++++++++++ .../lib/preinit/03_preinit_do_mpc85xx.sh | 9 +++ .../mpc85xx/base-files/lib/upgrade/platform.sh | 85 ++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100755 target/linux/mpc85xx/base-files/lib/mpc85xx.sh create mode 100644 target/linux/mpc85xx/base-files/lib/preinit/03_preinit_do_mpc85xx.sh create mode 100755 target/linux/mpc85xx/base-files/lib/upgrade/platform.sh (limited to 'target/linux/mpc85xx/base-files/lib') diff --git a/target/linux/mpc85xx/base-files/lib/mpc85xx.sh b/target/linux/mpc85xx/base-files/lib/mpc85xx.sh new file mode 100755 index 0000000000..57575634d6 --- /dev/null +++ b/target/linux/mpc85xx/base-files/lib/mpc85xx.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Copyright (C) 2013 OpenWrt.org +# + +MPC85XX_BOARD_NAME= +MPC85XX_MODEL= + +mpc85xx_board_detect() { + local model + local name + + model=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /model/ {print $2}' /proc/cpuinfo) + + case "$model" in + *"TL-WDR4900 v1") + name="tl-wdr4900-v1" + ;; + esac + + [ -z "$name" ] && name="unknown" + + [ -z "$MPC85XX_BOARD_NAME" ] && MPC85XX_BOARD_NAME="$name" + [ -z "$MPC85XX_MODEL" ] && MPC85XX_MODEL="$model" + + [ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/" + + echo "$MPC85XX_BOARD_NAME" > /tmp/sysinfo/board_name + echo "$MPC85XX_MODEL" > /tmp/sysinfo/model +} + +mpc85xx_board_name() { + local name + + [ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name) + [ -z "$name" ] && name="unknown" + + echo "$name" +} diff --git a/target/linux/mpc85xx/base-files/lib/preinit/03_preinit_do_mpc85xx.sh b/target/linux/mpc85xx/base-files/lib/preinit/03_preinit_do_mpc85xx.sh new file mode 100644 index 0000000000..88ba608379 --- /dev/null +++ b/target/linux/mpc85xx/base-files/lib/preinit/03_preinit_do_mpc85xx.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +do_mpc85xx() { + . /lib/mpc85xx.sh + + mpc85xx_board_detect +} + +boot_hook_add preinit_main do_mpc85xx diff --git a/target/linux/mpc85xx/base-files/lib/upgrade/platform.sh b/target/linux/mpc85xx/base-files/lib/upgrade/platform.sh new file mode 100755 index 0000000000..dbd179f581 --- /dev/null +++ b/target/linux/mpc85xx/base-files/lib/upgrade/platform.sh @@ -0,0 +1,85 @@ +# +# Copyright (C) 2011 OpenWrt.org +# + +. /lib/mpc85xx.sh + +PART_NAME=firmware +RAMFS_COPY_DATA=/lib/mpc85xx.sh + +tplink_get_hwid() { + local part + + part=$(find_mtd_part u-boot) + [ -z "$part" ] && return 1 + + dd if=$part bs=4 count=1 skip=81728 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +tplink_get_image_hwid() { + get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +tplink_get_image_boot_size() { + get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +platform_check_image() { + local board=$(mpc85xx_board_name) + local magic="$(get_magic_long "$1")" + + [ "$ARGC" -gt 1 ] && return 1 + + case $board in + tl-wdr4900-v1) + [ "$magic" != "01000000" ] && { + echo "Invalid image type." + return 1 + } + + local hwid + local imageid + + hwid=$(tplink_get_hwid) + imageid=$(tplink_get_image_hwid "$1") + + [ "$hwid" != "$imageid" ] && { + echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid." + return 1 + } + + local boot_size + + boot_size=$(tplink_get_image_boot_size "$1") + [ "$boot_size" != "00000000" ] && { + echo "Invalid image, it contains a bootloader." + return 1 + } + + return 0 + ;; + esac + + echo "Sysupgrade is not yet supported on $board." + return 1 +} + +platform_do_upgrade() { + local board=$(mpc85xx_board_name) + + case "$board" in + *) + default_do_upgrade "$ARGV" + ;; + esac +} + +disable_watchdog() { + killall watchdog + ( ps | grep -v 'grep' | grep '/dev/watchdog' ) && { + echo 'Could not disable watchdog' + return 1 + } +} + +append sysupgrade_pre_upgrade disable_watchdog -- cgit v1.2.3