mvebu: uDPU: add sysupgrade support
[openwrt/openwrt.git] / target / linux / mvebu / base-files / lib / preinit / 82_uDPU
diff --git a/target/linux/mvebu/base-files/lib/preinit/82_uDPU b/target/linux/mvebu/base-files/lib/preinit/82_uDPU
new file mode 100644 (file)
index 0000000..937a0a5
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014-2019 OpenWrt.org
+# Copyright (C) 2016 LEDE-Project.org
+#
+
+preinit_mount_udpu() {
+
+       . /lib/functions.sh
+
+       case $(board_name) in
+       methode,udpu)
+               # Check which device is detected
+               [ -b "/dev/mmcblk0" ] && mmcdev="/dev/mmcblk0" || mmcdev="/dev/mmcblk1"
+
+               if [ -b "${mmcdev}p4" ]; then
+                       mkdir /misc
+                       mount -t f2fs ${mmcdev}p4 /misc
+                       [ -f "/misc/sysupgrade.tgz" ] && {
+                               echo "- Restoring configuration files -"
+                               tar xzf /misc/sysupgrade.tgz -C /
+                               rm -f /misc/sysupgrade.tgz
+                               sync
+                       }
+                       [ -f "/misc/firmware/recovery.itb" ] && {
+                                       echo "- Updating /recovery partition -"
+                                       mkfs.ext4 -q ${mmcdev}p2 | echo y &> /dev/null
+                                       mkdir -p /tmp/recovery
+                                       mount ${mmcdev}p2 /tmp/recovery
+                                       cp /misc/firmware/recovery.itb /tmp/recovery
+                                       [ -f "/misc/firmware/boot.scr" ] && \
+                                               cp /misc/firmware/boot.scr /tmp/recovery
+                                       sync
+                                       umount /tmp/recovery
+                                       rm -rf /tmp/recovery
+
+                                       # Replace previous backup with the new one
+                                       [ -d "/misc/firmware_old" ] && rm -rf /misc/firmware_old
+                                       [ -d "/misc/firmware" ] && mv /misc/firmware /misc/firmware_old
+                               }
+               fi
+
+               # Legacy support - if rootfs was booted, instruct u-boot to keep the current root dev
+               [ "$(df | grep /dev/root)" ] && fw_setenv root_ok '2'
+       ;;
+       esac
+}
+
+boot_hook_add preinit_main preinit_mount_udpu