Hello,
I have a Linksys EA4500 (Viper) running OpenWrt. I am currently on OpenWrt 24.10.8, and the router is working normally.
I attempted to upgrade to the latest OpenWrt 25.12.5 using the official image:
openwrt-25.12.5-kirkwood-generic-linksys_ea4500-squashfs-sysupgrade.bin
The image is listed as compatible with the EA4500 on the OpenWrt download site.
However, after performing the upgrade, the router does not boot into 25.12.5. The power LED blinks for several minutes, the router becomes temporarily unreachable, and after reboot/recovery it eventually returns to the previous 24.10.8 installation.
I have reproduced this behavior twice with 25.12.5.
Current hardware/software information
Model: Linksys EA4500 (Viper)
SoC: Feroceon 88FR131 rev 1 (v5l)
Target: kirkwood/generic
OpenWrt version: 24.10.8
Kernel: 6.6.144
Revision: r29233-443ec4032a
ubus call system board:
{
"kernel": "6.6.144",
"hostname": "OpenWrt",
"system": "Feroceon 88FR131 rev 1 (v5l)",
"model": "Linksys EA4500 (Viper)",
"board_name": "linksys,ea4500",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.8",
"revision": "r29233-443ec4032a",
"target": "kirkwood/generic",
"description": "OpenWrt 24.10.8 r29233-443ec4032a"
}
}
MTD layout
dev: size erasesize name
mtd0: 00080000 00020000 "u-boot"
mtd1: 00020000 00020000 "u_env"
mtd2: 00020000 00020000 "s_env"
mtd3: 01a00000 00020000 "kernel1"
mtd4: 01600000 00020000 "ubi"
mtd5: 01a00000 00020000 "kernel2"
mtd6: 01600000 00020000 "rootfs2"
mtd7: 04a00000 00020000 "syscfg"
mtd8: 00140000 00020000 "unused"
U-Boot environment
Relevant variables:
bootdelay=0
boot_part_ready=3
auto_recovery=yes
enaAutoRecovery=yes
boot_part=1
bootcmd="run nandboot"
The boot commands are:
nandboot=nand read.e 0x2000000 0x200000 0x300000; ...; bootm 0x2000000;
altnandboot=nand read.e 0x2000000 0x1c00000 0x300000; ...; bootm 0x2000000;
So the current bootloader reads 3 MiB for the kernel from both the primary and alternate locations.
Current kernel command line
console=ttyS0,115200
mtdparts=nand_mtd:512k(uboot)ro,128k@512k(u_env),128k@640k(s_env),26m@2m(kernel),26m@2m(rootfs)fs,26m@28m(alt_kernel),26m@28m(alt_rootfs)fs,74m@54m(syscfg)
root=/dev/mtdblock4
ro
rootfstype=jffs2
OpenWrt upgrade script
The installed /lib/upgrade/platform.sh specifically handles the EA4500 using:
linksys,e4200-v2|\
linksys,ea3500|\
linksys,ea4500)
platform_do_upgrade_linksys "$1"
The relevant part of /lib/upgrade/linksys.sh is:
case $cur_boot_part in
1)
fw_setenv -s - <<-EOF
boot_part 2
bootcmd "run altnandboot"
EOF
printf "kernel2"
return
;;
2)
fw_setenv -s - <<-EOF
boot_part 1
bootcmd "run nandboot"
EOF
printf "kernel1"
return
;;
esac
Therefore, when upgrading from my current boot_part=1, OpenWrt should write the new firmware to the alternate slot and change the bootloader to:
boot_part=2
bootcmd="run altnandboot"
The upgrade appears to complete, but the router subsequently fails to boot the new firmware and eventually falls back to the working 24.10.8 installation.
NAND health
I also checked UBI:
UBI version: 1
Count of UBI devices: 1
Volumes count: 2
Count of bad physical eraseblocks: 0
The current 24.10.8 installation is stable and fully functional, so there does not appear to be an obvious NAND/filesystem failure.
My question
Could someone familiar with the EA4500/Viper bootloader and Kirkwood target explain why OpenWrt 25.12.5 fails to boot on this device?
In particular:
- Is the 25.12.5 EA4500 sysupgrade image actually expected to work directly from 24.10.8?
- Is the
0x300000kernel read size innandboot/altnandboota problem with newer OpenWrt kernels? - Does the EA4500 require the U-Boot environment to be modified before upgrading to 25.12.x?
- Is there a required intermediate firmware version between 24.10.x and 25.12.x?
- Could this be a bug/regression in the EA4500-specific
platform_do_upgrade_linksys()implementation? - Is there a safe way to determine why the alternate image fails to boot before changing any U-Boot variables?
- Are there any specific serial-console messages or additional commands I should collect to diagnose the failed 25.12.5 boot?
I currently have a working OpenWrt 24.10.8 installation, so I would prefer not to manually modify U-Boot or NAND unless the correct procedure is confirmed.
Any guidance on the correct upgrade procedure or the reason for the automatic rollback would be appreciated.
Thanks.