. /lib/upgrade/common.sh
local device="$1"
+ local fstype="$2"
[ -n "$device" ] && [ -b "$device" ] && {
- mount -t vfat "$device" /mnt
+ mount -t "${fstype}" "$device" /mnt
[ -f "/mnt/$BACKUP_FILE" ] && mv -f "/mnt/$BACKUP_FILE" /
umount /mnt
}
}
+octeon_get_n821_disk() {
+ local partnum=$1
+ local MAJOR MINOR DEVNAME DEVTYPE
+ while read line; do
+ export -n "${line}"
+ done < $(find /sys/bus/platform/devices/16f0000000000.ehci/ -path \*block/sd[a-z]/uevent)
+ echo "/dev/${DEVNAME}${partnum}"
+}
+
octeon_move_config() {
. /lib/functions.sh
case "$(board_name)" in
erlite|\
ubnt,usg)
- move_config "/dev/sda1"
+ move_config "/dev/sda1" "vfat"
;;
itus,shield-router)
- move_config "/dev/mmcblk1p1"
+ move_config "/dev/mmcblk1p1" "vfat"
;;
er|\
ubnt,edgerouter-4|\
ubnt,edgerouter-6p)
- move_config "/dev/mmcblk0p1"
+ move_config "/dev/mmcblk0p1" "vfat"
;;
+ cisco,vedge1000)
+ # Copy from the internal USB disk's first partition.
+ # It is resolved from the device path to not be dependent on which
+ # /dev/sd? path it is at, nor which UUID it happens to have.
+ move_config "$(octeon_get_n821_disk 1)" "ext2"
+ ;;
+
esac
}
# Copyright (C) 2021 OpenWrt.org
#
+if [ -x /usr/sbin/blkid ]; then
+ RAMFS_COPY_BIN="/usr/sbin/blkid"
+fi
+
platform_get_rootfs() {
local rootfsdev
+ local rootpartuuid
if read cmdline < /proc/cmdline; then
case "$cmdline" in
+ *root=PARTUUID=*)
+ rootpartuuid="${cmdline##*root=PARTUUID=}"
+ rootpartuuid="${rootpartuuid%% *}"
+ rootfsdev="$(blkid -o device -t PARTUUID="${rootpartuuid}")"
+ ;;
*root=*)
rootfsdev="${cmdline##*root=}"
rootfsdev="${rootfsdev%% *}"
fi
}
+platform_get_n821_disk() {
+ local partnum=$1
+ local DEVNAME
+ while read line; do
+ export -n "${line}"
+ done < $(find /sys/bus/platform/devices/16f0000000000.ehci/ -path \*block/sd[a-z]/uevent)
+ echo "/dev/${DEVNAME}${partnum}"
+}
+
platform_copy_config_helper() {
local device=$1
+ local fstype=$2
- mount -t vfat "$device" /mnt
+ mount -t "${fstype}" "$device" /mnt
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
umount /mnt
}
case "$(board_name)" in
erlite|\
ubnt,usg)
- platform_copy_config_helper /dev/sda1
+ platform_copy_config_helper /dev/sda1 vfat
;;
itus,shield-router)
- platform_copy_config_helper /dev/mmcblk1p1
+ platform_copy_config_helper /dev/mmcblk1p1 vfat
;;
er|\
ubnt,edgerouter-4|\
ubnt,edgerouter-6p)
- platform_copy_config_helper /dev/mmcblk0p1
+ platform_copy_config_helper /dev/mmcblk0p1 vfat
+ ;;
+ cisco,vedge1000)
+ platform_copy_config_helper "$(platform_get_n821_disk 1)" ext2
;;
esac
}
echo "flashing Itus Kernel to /boot/$kernel (/dev/mmblk1p1)"
tar -Oxf $tar_file "$board_dir/kernel" > /boot/$kernel
else
- mount -t vfat /dev/$kernel /boot
+ if [ "${board}" = "cisco,vedge1000" ]; then
+ local rootpartuuid
+ rootpartuuid="$(/usr/sbin/blkid -o value -s PARTUUID "${rootfs}")"
+ if [ -n "${rootpartuuid}" ]; then
+ echo "setting root partition to PARTUUID=${rootpartuuid}"
+ fw_setenv bootcmd 'usb start; ext2load usb 0:1 $loadaddr vmlinux.64; bootoctlinux $loadaddr coremask=f endbootargs rootfstype=squashfs rootwait root=PARTUUID='"${rootpartuuid}"
+ else
+ echo "WARNING: unable to figure out root partition UUID, leaving bootcmd unchanged"
+ fi
+ mount -t ext2 "${kernel}" /boot
+ else
+ mount -t vfat "${kernel}" /boot
+ fi
[ -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"
+ echo "flashing kernel to $(awk '/\/boot/ {print $1}' /proc/mounts)"
tar xf $tar_file $board_dir/kernel -O > /boot/vmlinux.64
md5sum /boot/vmlinux.64 | cut -f1 -d " " > /boot/vmlinux.64.md5
fi
local rootfs="$(platform_get_rootfs)"
local kernel=
+ if [ ! -b "${rootfs}" ] && [ "${board}" = "cisco,vedge1000" ]; then
+ # Default to the built-in USB disk for N821
+ rootfs="$(platform_get_n821_disk 2)"
+ fi
[ -b "${rootfs}" ] || return 1
case "$board" in
er | \
ubnt,edgerouter-4 | \
ubnt,edgerouter-6p)
- kernel=mmcblk0p1
+ kernel=/dev/mmcblk0p1
;;
erlite|\
ubnt,usg)
- kernel=sda1
+ kernel=/dev/sda1
;;
itus,shield-router)
kernel=ItusrouterImage
;;
+ cisco,vedge1000)
+ kernel="$(platform_get_n821_disk 1)"
+ ;;
*)
return 1
esac
itus,shield-router | \
ubnt,edgerouter-4 | \
ubnt,edgerouter-6p | \
- ubnt,usg)
+ ubnt,usg | \
+ cisco,vedge1000)
local kernel_length=$(tar xf $tar_file $board_dir/kernel -O | wc -c 2> /dev/null)
local rootfs_length=$(tar xf $tar_file $board_dir/root -O | wc -c 2> /dev/null)
[ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && {