23.05 to 24.10 incompatible ... sysupgrade image version (2.0->3.0) Linksys EA3500

Luci's Flash option does not approve of the 24.10 Sysupgrade for my Linksys EA3500. The router is running in Bridge mode as a secondary set of WiFi APs and was successfully reconfigured to run 23.05.5 what seems like a long time ago now; at least a year. Anyway, Luci says that there is a problem with trying to use the Sysupgrade to 24.10.

The device is supported, but this image is incompatible for sysupgrade based on the image version (2.0->3.0). Fri Mar 14 19:11:01 PDT 2025 upgrade: !The partitioning of the router has changed! Partition design has changed compared to older versions (up to 23.05) due to kernel size restrictions. Upgrade via sysupgrade mechanism is not possible, so u-boot args adjustment and new installation via factory style image is required. Upgrade instructions: 2. Run folowing commands in console (ssh or serial): fw_printenv fw_setenv nandboot "$(fw_printenv nandboot | awk -F= '{sub(/^nandboot=/, "");print}' | sed 's/0x300000/0x400000/g')" fw_setenv altnandboot "$(fw_printenv altnandboot | awk -F= '{sub(/^altnandboot=/, "");print}' | sed 's/0x300000/0x400000/g')" 3. Test if envs are ok by 'fw_printenv'. It should be the same except last argument of 'nand read.e' in 'nandboot' and 'altnandboot'. 4. If envs are ok, please apply FACTORY image with command: sysupgrade -F -n OPENWRT_FACTORY_IMAGE.bin 5. System should start normally. If not, serial console will be required. Image check failed.
 
The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform.

My novice eyes cannot tell where the separations are in the proscribed CLIs. Is that one long command or multiple commands? Are the vertical lines the separations between commands? Regardless, SSH into the router and running the commands did not have the desired effect of alleviating the issue(s).

Instruction 3 states to re-run 'fw_printenv' and check that the result is the same ... the same as what exactly? A floating reference to an unknown value is kinda hard to verify.

Obviously there are multiple issues present here so am in need of expertise picking these apart and understanding how to address each.

Thx

First thing to do is getting a serial console. Just in case...

1 Like

I don't have this device myself, but the device needs a kernel size adjustment to make room for a 24.10.0 kernel. Because this device has dual firmware partitions both need to be changed.

Please post the output of fw_printenv before you attempt the below steps.

This is what I read into this. Lines with # are comments by me. See if this makes sense to you.

The device is supported, but this image is incompatible for sysupgrade based on the image version (2.0->3.0). Fri Mar 14 19:11:01 PDT 2025 upgrade: !The partitioning of the router has changed! Partition design has changed compared to older versions (up to 23.05) due to kernel size restrictions. Upgrade via sysupgrade mechanism is not possible, so u-boot args adjustment and new installation via factory style image is required. 

Upgrade instructions: 

2. Run following commands in console (ssh or serial): 
# show current environment - save this to a file i.e. 'printenv.old'
fw_printenv 

# set 'nandboot' environment for new kernel size 
fw_setenv nandboot "$(fw_printenv nandboot | awk -F= '{sub(/^nandboot=/, "");print}' | sed 's/0x300000/0x400000/g')" 

# set 'altnandboot' environment fornew kernel size
fw_setenv altnandboot "$(fw_printenv altnandboot | awk -F= '{sub(/^altnandboot=/, "");print}' | sed 's/0x300000/0x400000/g')" 

3. Test if envs are ok by 'fw_printenv'. It should be the same except last argument of 'nand read.e' in 'nandboot' and 'altnandboot'. 
   # re-run 'fw_printenv' and save to a file i.e. 'printenv.new
   # compare the 'printenv.old' and 'printenv.new' files. Look for a string containing 'nand read.e' 
   # There should be two entries found in each file - one for 'nandboot' and another for 'altnandboot'
   # 'printenv.old' should contain `0x300000` and 'printenv.new' should contain `0x400000' instead.

4. If envs are ok, please apply FACTORY image with command: sysupgrade -F -n OPENWRT_FACTORY_IMAGE.bin 

5. System should start normally. If not, serial console will be required.
1 Like

I believe that the kernel size adjustment was performed concurrent with upgrade to 23.05 though I don't see the explicit kernsize in the command result below. Odd?

 -----------------------------------------------------
 OpenWrt 23.05.5, r24106-10cc5fcd00
 -----------------------------------------------------
root@Router-MstrBdrm:~# fw_printenv
bootdelay=0
baudrate=115200
loads_echo=0
ipaddr=192.168.1.10
serverip=192.168.1.254
rootpath=/mnt/ARM_FS
netmask=255.255.255.0
run_diag=yes
console=console=ttyS0,115200
badcount=0
bootbadcount=0
uenvbadcount=0
senvbadcount=0
buffbadcount=0
fs_bootargs=unused
mtdparts=mtdparts=nand_mtd:512k(uboot)ro,16k@512k(u_env),16k@528k(s_env),20m@2m(kernel),20m@2m(rootfs)fs,20m@22m(alt_kernel),20m@22m(alt_rootfs)fs,22m@42m(syscfg)
mfg_mtdparts=mtdparts=nand_mtd:512k(uboot)ro,16k@512k(u_env),16k@528k(s_env),20m@2m(kernel),20m@2m(rootfs)fs,20m@22m(alt_kernel),20m@22m(alt_rootfs)fs,20m@42m(mfg_kernel),20m@42m(mfg_rootfs)fs,2m@62m(syscfg)
ethprime=egiga0
bootargs_root=root=/dev/nfs rw
fs_bootargs_root=root=/dev/mtdblock4 ro rootfstype=jffs2
alt_fs_bootargs_root=root=/dev/mtdblock6 ro rootfstype=jffs2
mfg_fs_bootargs_root=root=/dev/mtdblock8 ro rootfstype=jffs2
usb_fs_bootargs_root=root=/dev/sda1 rw rootfstype=ext2
bootargs_end=:::DB88FXX81:eth0:none
image_name=uImage
nfsboot=tftp 0x2000000 uImage; setenv bootargs $(console) $(mfg_mtdparts) $(bootargs_root) nfsroot=$(serverip):$(rootpath) ip=$(ipaddr):$(serverip)$(bootargs_end); bootm 0x2000000;
nandboot=nand read.e 0x2000000 0x200000 0x300000; setenv bootargs $(console) $(mtdparts) $(fs_bootargs_root) serial_number=$(sn) uuid=$(uuid) hw_version=$(hw) device_mac=$(mac) factory_date=$(date) wps_pin=$(wps); bootm 0x2000000;
altnandboot=nand read.e 0x2000000 0x1600000 0x300000; setenv bootargs $(console) $(mtdparts) $(alt_fs_bootargs_root) serial_number=$(sn) uuid=$(uuid) hw_version=$(hw) device_mac=$(mac) factory_date=$(date) wps_pin=$(wps); bootm 0x2000000;
mfgboot=nand read.e 0x2000000 0x2a00000 0x300000; setenv bootargs $(console) $(mfg_mtdparts) $(mfg_fs_bootargs_root) serial_number=$(sn) uuid=$(uuid) hw_version=$(hw) device_mac=$(mac) factory_date=$(date) wps_pin=$(wps); bootm 0x2000000;
usbboot=usb start;ext2load usb 0:1 2000000 /uImage; setenv bootargs $(console) $(mtdparts) $(usb_fs_bootargs_root) rootdelay=10; bootm 0x2000000;
standalone=fsload 0x2000000 $(image_name);setenv bootargs $(console) root=/dev/mtdblock0 rw ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
lcd0_enable=0
lcd0_params=640x480-16@60
ethmtu=1500
eth1mtu=1500
mvPhoneConfig=mv_phone_config=dev[0]:fxs,dev[1]:fxo
mvNetConfig=mv_net_config=(00:11:88:0f:62:81,0:1:2:3),mtu=1500
usb0Mode=host
yuk_ethaddr=00:00:00:EE:51:81
nandEcc=1bit
netretry=no
rcvrip=169.254.100.100
loadaddr=0x02000000
autoload=no
image_multi=yes
mtdparts_version=2
envsaved=yes
ethact=egiga0
auto_recovery=yes
boot_part_ready=3
stdin=serial
stdout=serial
stderr=serial
mainlineLinux=no
enaMonExt=no
enaCpuStream=no
enaWrAllo=no
pexMode=RC
disL2Cache=no
setL2CacheWT=yes
disL2Prefetch=yes
enaICPref=yes
enaDCPref=yes
sata_dma_mode=yes
netbsd_en=no
vxworks_en=no
disaMvPnp=no
enaAutoRecovery=yes
pcieTune=no
pcieTune1=no
layout=ver.0.0.7
model=EA3500
hw=RGWM-C5_0GA
edal_key=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
mac=▒▒▒▒▒▒▒▒
ethaddr=▒▒▒▒▒▒▒▒
eth1addr=▒▒▒▒▒▒▒▒
date=2013/11/06
sn=12C1060B305333
uuid=▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
wps=▒▒▒▒▒▒▒▒
boot_part=2
bootcmd="run altnandboot"
nandboot=nand read.e 0x2000000 0x200000 0x300000;<truncated>
altnandboot=nand read.e 0x2000000 0x1600000 0x300000;<truncated>

Above is your current firmware environment and last argument is 0x300000 (3MB). I wanted to ensure this before you followed through the next instructions. So this is good. You should be OK to follow them provided they were correct from your post.

Before you sysupgrade to 24.10.0 FACTORY as instructed, run fw_printenv again and verify that the last argument shows 0x400000 (4MB)

nandboot=nand read.e 0x2000000 0x200000 0x400000;<truncated>
altnandboot=nand read.e 0x2000000 0x1600000 0x400000;<truncated>

OK, I screwed up and got ahead of myself while futzing around with this update. In prep, I went thru all the menus recording all the settings given that a Factory image was going to be used. Once completed recording page snapshots I grabbed the latest Factory image and included a couple of extra luci packages in the build tool option, i.e., advanced reboot and attended upgrade.
Then, I installed the new Factory image of 24.10...forgetting to RESIZE the partition first! OH NO!! AUGH is one form of dismay that one might be inclined to express upon realizing their folly. :grimacing: Much to my surprise the EA3500 wasn't bricked after all. In fact, after several resets to regain access the Overview shows that 24.10 is installed and running. The important item to note here is that the nandboot and altnandboot settings remain as they were; unchanged. Expecting that, I was not.

nandboot=nand read.e 0x2000000 0x200000 0x300000;<truncated>
altnandboot=nand read.e 0x2000000 0x1600000 0x300000;<truncated>

Soooo, what does this imply about potential operational impacts?