ipq806x: EA8500 fix sysupgrade over stock firmware
authorAdrian Panella <ianchi74@outlook.com>
Thu, 8 Dec 2016 08:41:58 +0000 (02:41 -0600)
committerJohn Crispin <john@phrozen.org>
Tue, 20 Dec 2016 08:35:37 +0000 (09:35 +0100)
When running sysupgrade for the first time over the second partition
(that still had stock firmware) the rootfs wasn't flashed as there
wasn't enough space.
This happend because stock also uses UBI, but the volume name wasn't
recognised and wasn't deleted before flashing.

Signed-off-by: Adrian Panella <ianchi74@outlook.com>
target/linux/ipq806x/base-files/lib/upgrade/linksys.sh

index ca5161a61b9ab87f73dc35df383ca9fea332c830..12f25efdae87979e79a252237f735932cb66d42f 100644 (file)
@@ -55,11 +55,36 @@ platform_do_upgrade_linksys() {
                        CI_UBIPART="rootfs2"
                fi
 
+
+               # remove "squashfs" vol (in case we are flashing over a stock image, which is also UBI)
+
+               local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
+               if [ ! "$mtdnum" ]; then
+                       echo "cannot find ubi mtd partition $CI_UBIPART"
+                       return 1
+               fi
+
+               local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+               if [ ! "$ubidev" ]; then
+                       ubiattach -m "$mtdnum"
+                       sync
+                       ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+               fi
+
+               if [ "$ubidev" ]; then
+
+                       local squash_ubivol="$( nand_find_volume $ubidev squashfs )"
+
+                       # kill volume
+                       [ "$squash_ubivol" ] && ubirmvol /dev/$ubidev -N squashfs || true
+               fi
+
+
+               # complete std upgrade
                nand_upgrade_tar "$1"
        }
        [ "$magic_long" = "27051956" ] && {
                # check firmwares' rootfs types
-               local target_mtd=$(find_mtd_part $part_label)
                local oldroot="$(linksys_get_root_magic $target_mtd)"
                local newroot="$(linksys_get_root_magic "$1")"
 
@@ -80,9 +105,6 @@ linksys_preupgrade() {
        export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch"
        export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock"
 
-       [ -f /tmp/sysupgrade.tgz ] && {
-               cp /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz
-       }
 }
 
 append sysupgrade_pre_upgrade linksys_preupgrade