diff options
3 files changed, 131 insertions, 0 deletions
diff --git a/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg b/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg new file mode 100644 index 0000000..54aff7d --- /dev/null +++ b/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg @@ -0,0 +1,27 @@ +# +# Copyright (C) 2014 OpenWrt.org +# + +preinit_mount_syscfg() { + + . /lib/functions.sh + . /lib/mvebu.sh + + case $(mvebu_board_name) in + armada-xp-mamba) + mkdir /tmp/syscfg + ubiattach -p /dev/mtd8 + mount -t ubifs ubi1:syscfg /tmp/syscfg + [ -f /tmp/syscfg/sysupgrade.tgz ] && { + echo "- config restore -" + cd / + mv /tmp/syscfg/sysupgrade.tgz /tmp + tar xzf /tmp/sysupgrade.tgz + rm -f /tmp/sysupgrade.tgz + sync + } + ;; + esac +} + +boot_hook_add preinit_main preinit_mount_syscfg diff --git a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh new file mode 100644 index 0000000..8f5a89a --- /dev/null +++ b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh @@ -0,0 +1,54 @@ +# +# Copyright (C) 2014 OpenWrt.org +# + +linksys_get_target_firmware() { + cur_boot_part=`/usr/sbin/fw_printenv -n boot_part` + target_firmware="" + if [ "$cur_boot_part" = "1" ] + then + # current primary boot - update alt boot + target_firmware="kernel2" + fw_setenv boot_part 2 + fw_setenv bootcmd "run altnandboot" + elif [ "$cur_boot_part" = "2" ] + then + # current alt boot - update primary boot + target_firmware="kernel1" + fw_setenv boot_part 1 + fw_setenv bootcmd "run nandboot" + fi + + echo "$target_firmware" +} + +platform_do_upgrade_linksys() { + local magic_long="$(get_magic_long "$1")" + + mkdir -p /var/lock + local part_label="$(linksys_get_target_firmware)" + touch /var/lock/fw_printenv.lock + + if [ ! -n "$part_label" ] + then + echo "cannot find target partition" + exit 1 + fi + + # we don't know, what filesystem does the other partition use, + # nuke it tobe safe + mtd erase $part_label + get_image "$1" | mtd -n write - $part_label +} + +linksys_preupgrade() { + export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/sbin/fw_printenv /usr/sbin/fw_setenv" + export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch" + export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock" + + [ -f /tmp/sysupgrade.tgz ] && { + cp /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz + } +} + +append sysupgrade_pre_upgrade linksys_preupgrade diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh new file mode 100755 index 0000000..532f598 --- /dev/null +++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh @@ -0,0 +1,50 @@ +# +# Copyright (C) 2014 OpenWrt.org +# + +. /lib/mvebu.sh + +RAMFS_COPY_DATA=/lib/mvebu.sh + +platform_check_image() { + local board=$(mvebu_board_name) + local magic_long="$(get_magic_long "$1")" + + [ "$#" -gt 1 ] && return 1 + + case "$board" in + armada-xp-mamba ) + [ "$magic_long" != "27051956" ] && { + echo "Invalid image type." + return 1 + } + return 0; + ;; + esac + + echo "Sysupgrade is not yet supported on $board." + return 1 +} + +platform_do_upgrade() { + local board=$(mvebu_board_name) + + case "$board" in + armada-xp-mamba) + platform_do_upgrade_linksys "$ARGV" + ;; + *) + 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 |