summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodrigo Balerdi2024-09-24 06:51:43 +0000
committerDaniel Golle2024-09-27 17:24:44 +0000
commitc4022e6199a3337d6e4d733106d5cf3879e0b35b (patch)
tree488e7690658832f6485229d6bed26136a8c0e06d
parenta4c95f1444b0cf43fbb6e3610451211eb2d1d017 (diff)
downloadopenwrt-c4022e6199a3337d6e4d733106d5cf3879e0b35b.tar.gz
base-files: emmc: invalidate kernel image while rootfs is being written
Some setups have alternate boot actions in case the main OS fails to boot. These can include a secondary copy of the OS, a recovery OS, a fallback to TFTP boot, etc. This commit invalidates the kernel image while rootfs is being written which, if a sysupgrade is interrupted, will trigger an alternate boot action in devices that support it. This results in safer sysupgrades. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
-rw-r--r--package/base-files/files/lib/upgrade/emmc.sh13
1 files changed, 10 insertions, 3 deletions
diff --git a/package/base-files/files/lib/upgrade/emmc.sh b/package/base-files/files/lib/upgrade/emmc.sh
index 49cffe1c65..78e398d6d5 100644
--- a/package/base-files/files/lib/upgrade/emmc.sh
+++ b/package/base-files/files/lib/upgrade/emmc.sh
@@ -16,15 +16,22 @@ emmc_upgrade_tar() {
tar tf "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
tar tf "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
- [ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
- export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
-
[ "$has_rootfs" = 1 -a "$EMMC_ROOT_DEV" ] && {
+ # Invalidate kernel image while rootfs is being written
+ [ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] && {
+ dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 count=8
+ sync
+ }
+
export EMMC_ROOTFS_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
# Account for 64KiB ROOTDEV_OVERLAY_ALIGN in libfstools
EMMC_ROOTFS_BLOCKS=$(((EMMC_ROOTFS_BLOCKS + 127) & ~127))
+ sync
}
+ [ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
+ export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
+
if [ -z "$UPGRADE_BACKUP" ]; then
if [ "$EMMC_DATA_DEV" ]; then
dd if=/dev/zero of="$EMMC_DATA_DEV" bs=512 count=8