Yes, this is explicitly supported by the Linksys mvebu upgrade scripts. I also tested it on my Mamba and it worked as expected.
But looking at those scripts now, I wonder if this patchset missed a detail: The kernel size/rootfs split is coded into linksys_get_root_magic(), and used by platform_do_upgrade_linksys() to figure out if both old and new root is UBI when doing factory image upgrades:
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")"
mkdir -p /var/lock
local part_label="$(linksys_get_target_firmware)"
touch /var/lock/fw_printenv.lock
if [ ! -n "$part_label" ]
then
v "cannot find target partition"
exit 1
fi
local target_mtd=$(find_mtd_part $part_label)
[ "$magic_long" = "73797375" ] && {
CI_KERNPART="$part_label"
if [ "$part_label" = "kernel1" ]
then
CI_UBIPART="rootfs1"
else
CI_UBIPART="rootfs2"
fi
nand_upgrade_tar "$1"
}
[ "$magic_long" = "27051956" -o "$magic_long" = "0000a0e1" ] && {
# 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")"
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
}
}
So this detection falis when either old or new (or both) images are using the new 4M split. A minor problem, since the only differenct is whether the old UBI partition is erased or not. But I guess that code was put there for a reason...
EDIT: is that reason wear levelling of the unwritten blocks? My knowledge of the UBI internals is close to non-existing, but I imagine this could end up with blocks being marked as more used than the freshly written ones?
Suggestions on how to make that work for the new world, where we should expect any combination of 3-or-4 MB for new and old?