diff options
Diffstat (limited to 'target/linux/octeon/base-files/lib')
3 files changed, 172 insertions, 0 deletions
diff --git a/target/linux/octeon/base-files/lib/functions/octeon.sh b/target/linux/octeon/base-files/lib/functions/octeon.sh new file mode 100755 index 0000000..deae9e3 --- /dev/null +++ b/target/linux/octeon/base-files/lib/functions/octeon.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# +# Copyright (C) 2010-2013 OpenWrt.org +# + +OCTEON_BOARD_NAME= +OCTEON_MODEL= + +octeon_board_detect() { + local machine + local name + + machine=$(grep "^system type" /proc/cpuinfo | sed "s/system type.*: \(.*\)/\1/g") + + case "$machine" in + "UBNT_E100"*) + name="erlite" + ;; + + "UBNT_E200"*) + name="er" + ;; + + "UBNT_E220"*) + name="erpro" + ;; + + *) + name="generic" + ;; + esac + + [ -z "$OCTEON_BOARD_NAME" ] && OCTEON_BOARD_NAME="$name" + [ -z "$OCTEON_MODEL" ] && OCTEON_MODEL="$machine" + + [ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/" + + echo "$OCTEON_BOARD_NAME" > /tmp/sysinfo/board_name + echo "$OCTEON_MODEL" > /tmp/sysinfo/model +} + +octeon_board_name() { + local name + + [ -f /tmp/sysinfo/board_name ] || octeon_board_detect + [ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name) + [ -z "$name" ] && name="unknown" + + echo "$name" +} diff --git a/target/linux/octeon/base-files/lib/preinit/79_move_config b/target/linux/octeon/base-files/lib/preinit/79_move_config new file mode 100644 index 0000000..39cefd5 --- /dev/null +++ b/target/linux/octeon/base-files/lib/preinit/79_move_config @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright (C) 2014 OpenWrt.org + +move_config() { + . /lib/functions/octeon.sh + + local board="$(octeon_board_name)" + + case "$board" in + erlite) + mount -t vfat /dev/sda1 /mnt + mv -f /mnt/sysupgrade.tgz / + umount /mnt + ;; + esac +} + +boot_hook_add preinit_mount_root move_config diff --git a/target/linux/octeon/base-files/lib/upgrade/platform.sh b/target/linux/octeon/base-files/lib/upgrade/platform.sh new file mode 100755 index 0000000..4cb03bc --- /dev/null +++ b/target/linux/octeon/base-files/lib/upgrade/platform.sh @@ -0,0 +1,104 @@ +# +# Copyright (C) 2014 OpenWrt.org +# + +. /lib/functions/octeon.sh + +platform_get_rootfs() { + local rootfsdev + + if read cmdline < /proc/cmdline; then + case "$cmdline" in + *block2mtd=*) + rootfsdev="${cmdline##*block2mtd=}" + rootfsdev="${rootfsdev%%,*}" + ;; + *root=*) + rootfsdev="${cmdline##*root=}" + rootfsdev="${rootfsdev%% *}" + ;; + esac + + echo "${rootfsdev}" + fi +} + +platform_copy_config() { + local board="$(octeon_board_name)" + + case "$board" in + erlite) + mount -t vfat /dev/sda1 /mnt + cp -af "$CONF_TAR" /mnt/ + umount /mnt + ;; + esac +} + +platform_do_flash() { + local tar_file=$1 + local board=$2 + local kernel=$3 + local rootfs=$4 + + mkdir -p /boot + mount -t vfat /dev/$kernel /boot + + [ -f /boot/vmlinux.64 -a ! -L /boot/vmlinux.64 ] && { + mv /boot/vmlinux.64 /boot/vmlinux.64.previous + mv /boot/vmlinux.64.md5 /boot/vmlinux.64.md5.previous + } + + echo "flashing kernel to /dev/$kernel" + tar xf $tar_file sysupgrade-$board/kernel -O > /boot/vmlinux.64 + md5sum /boot/vmlinux.64 | cut -f1 -d " " > /boot/vmlinux.64.md5 + echo "flashing rootfs to ${rootfs}" + tar xf $tar_file sysupgrade-$board/root -O | dd of="${rootfs}" bs=4096 + sync + umount /boot +} + +platform_do_upgrade() { + local tar_file="$1" + local board=$(octeon_board_name) + local rootfs="$(platform_get_rootfs)" + local kernel= + + [ -b "${rootfs}" ] || return 1 + case "$board" in + erlite) + kernel=sda1 + ;; + er) + kernel=mmcblk0p1 + ;; + *) + return 1 + esac + + platform_do_flash $tar_file $board $kernel $rootfs + + return 0 + +} + +platform_check_image() { + local board=$(octeon_board_name) + + case "$board" in + erlite | \ + er) + local tar_file="$1" + local kernel_length=`(tar xf $tar_file sysupgrade-$board/kernel -O | wc -c) 2> /dev/null` + local rootfs_length=`(tar xf $tar_file sysupgrade-$board/root -O | wc -c) 2> /dev/null` + [ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && { + echo "The upgarde image is corrupt." + return 1 + } + return 0 + ;; + esac + + echo "Sysupgrade is not yet supported on $board." + return 1 +} |