From: Jonas Gorski Date: Mon, 26 Sep 2016 10:02:40 +0000 (+0200) Subject: mvebu: add sysupgrade support for clearfog X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=6859098d97aaa4e60a795f5887911958ca134ed0;p=librecmc%2Flibrecmc.git mvebu: add sysupgrade support for clearfog Add and enable sysupgrade support for clearfog boards, based on how the brcm2708 target does it. Signed-off-by: Jonas Gorski Acked-by: Felix Fietkau --- diff --git a/target/linux/mvebu/base-files/lib/preinit/79_move_config b/target/linux/mvebu/base-files/lib/preinit/79_move_config new file mode 100644 index 0000000000..b0ee62a809 --- /dev/null +++ b/target/linux/mvebu/base-files/lib/preinit/79_move_config @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright (C) 2015 OpenWrt.org + +BOOTPART=/dev/mmcblk0p1 + +move_config() { + if [ -b $BOOTPART ]; then + insmod nls_cp437 + insmod nls_iso8859-1 + insmod fat + insmod vfat + mkdir -p /boot + mount -t vfat -o rw,noatime $BOOTPART /boot + [ -f /boot/sysupgrade.tgz ] && mv -f /boot/sysupgrade.tgz / + fi +} + +boot_hook_add preinit_mount_root move_config diff --git a/target/linux/mvebu/base-files/lib/upgrade/clearfog.sh b/target/linux/mvebu/base-files/lib/upgrade/clearfog.sh new file mode 100644 index 0000000000..5388b22198 --- /dev/null +++ b/target/linux/mvebu/base-files/lib/upgrade/clearfog.sh @@ -0,0 +1,32 @@ +get_magic_at() { + local file="$1" + local pos="$2" + get_image "$file" | dd bs=1 count=2 skip="$pos" 2>/dev/null | hexdump -v -n 2 -e '1/1 "%02x"' +} + +platform_check_image_clearfog() { + local file="$1" + local magic + + magic=$(get_magic_at "$file" 510) + [ "$magic" != "55aa" ] && { + echo "Failed to verify MBR boot signature." + return 1 + } + + return 0; +} + +platform_do_upgrade_clearfog() { + sync + get_image "$1" | dd of=/dev/mmcblk0 bs=2M conv=fsync + sleep 1 +} + +platform_copy_config_clearfog() { + mkdir -p /boot + [ -f /boot/kernel.img ] || mount -t vfat -o rw,noatime /dev/mmcblk0p1 /boot + cp -af "$CONF_TAR" /boot/ + sync + umount /boot +} diff --git a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh index fc403332bd..baa29dc335 100644 --- a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh @@ -74,13 +74,18 @@ platform_do_upgrade_linksys() { } 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" + local board=$(mvebu_board_name) - [ -f /tmp/sysupgrade.tgz ] && { - cp /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz - } + case "$board" in + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) + 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 + } + ;; + esac } -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 index 2f699a745f..5652e98a4e 100755 --- a/target/linux/mvebu/base-files/lib/upgrade/platform.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh @@ -20,6 +20,10 @@ platform_check_image() { } return 0; ;; + armada-388-clearfog) + platform_check_image_clearfog "$ARGV" + return $? + ;; esac echo "Sysupgrade is not yet supported on $board." @@ -33,11 +37,23 @@ platform_do_upgrade() { armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) platform_do_upgrade_linksys "$ARGV" ;; + armada-388-clearfog) + platform_do_upgrade_clearfog "$ARGV" + ;; *) default_do_upgrade "$ARGV" ;; esac } +platform_copy_config() { + local board=$(mvebu_board_name) + + case "$board" in + armada-388-clearfog) + platform_copy_config_clearfog "$ARGV" + ;; + esac +} disable_watchdog() { killall watchdog diff --git a/target/linux/mvebu/image/Makefile b/target/linux/mvebu/image/Makefile index 377f098cc5..b0cc1648ef 100644 --- a/target/linux/mvebu/image/Makefile +++ b/target/linux/mvebu/image/Makefile @@ -175,7 +175,7 @@ define Device/armada-388-clearfog KERNEL_INSTALL := 1 KERNEL := dtb | kernel-bin DEVICE_TITLE := SolidRun ClearFog - DEVICE_PACKAGES := mkf2fs e2fsprogs swconfig + DEVICE_PACKAGES := mkf2fs e2fsprogs swconfig kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 IMAGES := bundle.tar.gz sdcard.img.gz IMAGE/bundle.tar.gz := clearfog-bundle IMAGE/sdcard.img.gz := boot-scr | boot-img | sdcard-img | gzip