dualboot: update-firmware: new option to swap active system ('--swap-active-system')

This allows to remove the script 'on-the-fly-swap-partition.sh'.

https://onedigi.atlassian.net/browse/DEL-8399

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
This commit is contained in:
Tatiana Leon 2023-03-21 17:54:09 +01:00
parent 1b17e8f657
commit ccc4680924
3 changed files with 18 additions and 54 deletions

View File

@ -11,7 +11,6 @@ SRC_URI = " \
file://dualboot-init \
file://update-firmware \
file://firmware-update-check.service \
file://on-the-fly-swap-partition.sh \
"
S = "${WORKDIR}"
@ -28,7 +27,6 @@ do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/update-firmware ${D}${bindir}
install -m 0755 ${WORKDIR}/on-the-fly-swap-partition.sh ${D}${bindir}
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/firmware-update-check.service ${D}${systemd_unitdir}/system/
@ -65,7 +63,6 @@ FILES:${PN} += " \
${sysconfdir}/dualboot-init \
${sysconfdir}/init.d/dualboot-init \
${bindir}/update-firmware \
${bindir}/on-the-fly-swap-partition.sh \
${systemd_unitdir}/system/firmware-update-check.service \
${@oe.utils.conditional('TRUSTFENCE_SIGN', '1', '${sysconfdir}/ssl/certs/key.pub', '', d)} \
"

View File

@ -1,48 +0,0 @@
#!/bin/sh
#===============================================================================
#
# on-the-fly-swap-partition.sh
#
# Copyright (C) 2021-2022 by Digi International Inc.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
#
#
# !Description: On the fly script to swap active partition
#
#===============================================================================
ACTIVE_SYSTEM="$(fw_printenv -n active_system 2>/dev/null)"
# Get current partition information so we can
# determine where to flash the images.
if [ "${ACTIVE_SYSTEM}" = "linux_a" ]; then
KERNELBOOT="linux_b"
ROOTFS="rootfs_b"
else
KERNELBOOT="linux_a"
ROOTFS="rootfs_a"
fi
if grep -qs environment /proc/mtd; then
fw_setenv mtdbootpart ${KERNELBOOT}
fw_setenv mtdrootfspart ${ROOTFS}
fw_setenv rootfsvol ${ROOTFS}
fw_setenv active_system ${KERNELBOOT}
else
# Get Boot partition device and index.
BOOT_DEV="$(fw_printenv -n mmcbootdev 2>/dev/null)"
# get boot partition index
MMC_PART="$(ls -l /dev/disk/by-partlabel/ | grep -i ${KERNELBOOT} | awk '{print $11}' | sed -e 's/[../mmcblkp]//g' -e 's/^.//')"
# search rootfs UUID
MMCROOT_PART="$(ls -l /dev/disk/by-partlabel/ | grep -i ${ROOTFS} | awk '{print $11}' | sed -e 's/[../mmcblkp]//g' -e 's/^.//')"
PART_UUID="$(ls -l /dev/disk/by-partuuid/ | grep -i mmcblk${BOOT_DEV}p${MMCROOT_PART} | awk '{print $9}')"
fw_setenv mmcroot PARTUUID=${PART_UUID}
fw_setenv mmcpart ${MMC_PART}
fw_setenv active_system ${KERNELBOOT}
fi

View File

@ -26,6 +26,7 @@ PUBLIC_KEY="/etc/ssl/certs/key.pub"
ACTIVE_SYSTEM="$(fw_printenv -n active_system 2>/dev/null)"
SHOW_ACTIVE_SYSTEM=0
SCRIPT_MODE=0
SWAP_ACTIVE_SYSTEM=0
REBOOT=1
UPDATE_FILE=""
ALT_BOOT=""
@ -42,6 +43,8 @@ Usage: ${SCRIPTNAME} [OPTIONS] </your-path/your-filename>.swu
-a --active Show currently active system
--no-reboot Do not reboot after update
--swap-active-system Swap active system block.
This option reboots the system, unless '--no-reboot' is specified.
-v --verbose Enable verbosity
-h --help Print help and exit
@ -59,12 +62,13 @@ show_active_system() {
fi
}
# $1: message to show
reboot_system() {
if [ ${REBOOT} -eq 1 ]; then
echo "Firmware update finished. Rebooting the system."
echo "${1}. Rebooting the system."
reboot -f
else
echo "Firmware update finished. Reboot the system to use the new version."
echo "${1}. Reboot the system to use the new version."
fi
}
@ -153,7 +157,7 @@ update_device() {
if ! swap_active_system; then
exit 1
fi
reboot_system
reboot_system "Firmware update finished"
else
echo "[ERROR] $? There was an error performing the update"
fi
@ -165,6 +169,8 @@ while :; do
;;
--no-reboot) REBOOT=0
;;
--swap-active-system) SWAP_ACTIVE_SYSTEM=1
;;
-s) SCRIPT_MODE=1
;;
-v|--verbose) VERBOSE="-v"
@ -192,6 +198,15 @@ else
ALT_ROOTFS="rootfs_a"
fi
# Swap active system.
if [ ${SWAP_ACTIVE_SYSTEM} -eq 1 ]; then
if ! swap_active_system; then
exit 1
fi
reboot_system "Swapped active system to $(echo ${ALT_BOOT} | cut -d'_' -f2 | tr [:lower:] [:upper:])"
exit
fi
# Check update file parameter.
if [ -z "${UPDATE_FILE}" ]; then
echo "[ERROR] Update file not specified"