Right, I think I'm understanding? So, when the first flash happens from stock with openwrt-qualcommax-ipq807x-linksys_mx4200v1-squashfs-factory.bin, it flashes to alt_rootfs? Then on consequent sysupgrade it doesn't actually flash the updated firmware?
I'm not optimistic (as I say I don't really know what I'm poking at but trying to understand) but I wonder if the behaviour might be any different with this patch?
diff --git a/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
index 21d22c6f1b..e01e207676 100644
--- a/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
+++ b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
@@ -44,6 +44,10 @@ linksys_get_target_firmware() {
esac
}
+linksys_get_root_magic() {
+ (get_image "$@" | dd skip=786432 bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2>/dev/null
+}
+
platform_do_upgrade_linksys() {
local magic_long="$(get_magic_long "$1")"
@@ -102,6 +106,19 @@ platform_do_upgrade_linksys() {
}
[ "$magic_long" = "27051956" ] && {
+ # check firmwares' rootfs types
+ local oldroot="$(linksys_get_root_magic $target_mtd)"
+ local newroot="$(linksys_get_root_magic "$1")"
+
+ if [ "$newroot" = "55424923" -a "$oldroot" = "55424923" ]
+ # we're upgrading from a firmware with UBI to one with UBI
+ then
+ # erase everything to be safe
+ mtd erase $part_label
+ get_image "$1" | mtd -n write - $part_label
+ else
+ get_image "$1" | mtd write - $part_label
+ fi
get_image "$1" | mtd write - $part_label
}
}
This was some code that was removed a number of years ago as it was deemed to be doing nothing but I wonder if it is relevant. Bit a stab in the dark but maybe worth a shot?