Adding OpenWrt support for Zyxel EX5601-T0

People, I seem to have a quite new firmware version never mentioned before on a T-56 Odido router: V5.70(ACEA.0)T56C_b29 (literally copied).

For a starter, all traditional JS-methods don't work. So serial-free flashing is out of scope.

Bootloader has been blocked, so mtk-uartboot is also done:

F0: 102B 0000
FA: 1040 0000
FA: 1040 0000 [0200]
F9: 0000 0000
V0: 0000 0000 [0001]
00: 0007 8000
01: 0000 0000
BP: 2400 0209 [0000]
G0: 1190 0000
EC: 0000 0000 [1000]
T0: 0000 0193 [010F]
Jump to BL

After compiling zyeng, and following the guide here https://github.com/ndandanov/zyxel-ex5601-t0-openwrt/blob/main/guide/guide.md I followed on the tittle and yota, but didn't work out.

Can't reproduce these findings to work on this version either... Adding OpenWrt support for Zyxel EX5601-T0 - #1544 by pstlr78

Any thoughts?

How? You need to show what you did, what you expected, and what the results were.

And not by referring to "I followed this guide" etc, please. Provide your actual commands and actual output from the device

Pointing to the guide is fine if it works, but not if it fails. The reason will be in parts not covered by the guide. Either because you made a mistake or because the device did something unexpected.

I tried this script to get OpenWrt running on my EX5601-T0 but it resulted in my router booting to a red light. Anyone know if that means it's fixable with a serial adapter?

Fixed it with a serial connection :man_shrugging:

I was trying to understand the state of "normal" sfp use with 5601, we are still in the "far long from going live", right?
just to know where we are :slight_smile:

As of now there is no logic to detect SFP and switch between the two ports.
There is work done in mainline but the path is still quite long.
It has been 2years I think since first work has begun.

I think that some where there are userspace scripts that poll the SFP mode0 gpio and manually trigger some register changes in the MAC block of the SOC.

The other solution (temporary) I had proposed but I havent received feedback on, was a UBOOT llogic that would detect on boot if a SFP was inserted and booted. and would load a device tree overlay to enable the right port.

Current pending mainline patches:

thanks for the update :slight_smile:
anyway, SFP is working (manually exporting gpios) but with no autosensing (and this will never be, right?)
thanks :slight_smile:

Exactly the scripts will not detect the real SFP stick speed, fixed at 2500.
You can build a custom overlay if you need the SFP and autospeed.

Hi guys. I have two EX5601-T0 (with sfp port) with openwrt uboot layout.
One of them at a friend house is giving me problems. Basically LAN1 is connected to a gb switch and random I find it negotiated 100mb. If I reboot the router it goes back to 1gb, so I suppose it is a software problem, and not a hardware one (for ex. cable). anyway I already tried to unplug and plug back again the cable. I cannot change it because the switch at the other part of the cable is very far away and I ended it straigh with rj45 male plug (no female wall socket) at the router terminal. I could make the plug again but I would like to understand if it can be software first, since I should go to my friend house which is not very close to me.

I read here the notice related to an issue, but I can't understand if it is what I am experiencing.

the other zyxel (mine)has no problem at all......
so, what do you think? is this the well know problem reported in homepage? I read a bit of packet loss problems, so I cannot understand if it is what I am experiencing.....
thanks

Depending on the capabilities of the EX5601-T0's ports you could try ethtool (probably ethtool-full) --cable-test and/or --cable-test-tdr options, see here...

thanks. what I don't understand is what is WAN e what is LAN1. If I need to slow down the eth port, I would like to keep the WAN port at 2.5 and slow down the LAN1 only. is this possible? or the comand to slow down eth port will affect the WAN and LAN1 both?

Trial and error ?

In my world, it's pretty obvious what's what ...

following two lines (for eth1 and lan1) to /etc/rc.local

Btw, eth1 is deprecated - https://openwrt.org/releases/25.12/notes-25.12.0#known_issues.

Hi, I updated today from firmware 24 to 25.12.5, keeping settings during upgrade, and can't understand how to configure this LED. Only thing missing.
I copied this file on my system https://github.com/openwrt/openwrt/blob/main/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds is it correct?

I have a similar issue on my EX used as an AP, for what I know it is an issue with the cable.
It does it on every port, but on my previous location I didnt had any issue,

I just need to unpug and plug the ETH back in and it auto negotiate back to 1Gb.

thanks for your report. I will check it as soon as I will go there. for now, I just wanted to know if the issue that is reported will "appear" as I described, that's why I asked here. Since I have always read a generic "packet loss" but in my specific case I see the negotiation speed showing 100mb so I don't know if it is the same case

Anybody could give me their /etc/config/system file section called "config led 'led_wan'" ?

@adi8900 Maybe you can help me fixing the wan led?

you can re-build its content by reading what was its setup under board.json. the default setup script build it via:
ucidef_set_led_netdev "wan" "2.5G-WAN" "mdio-bus:06:green:wan" "wan" "link_2500"

On luci I have for WAN:


But:

  • I'm on custom uboot mod with dts overlays and custom patches as Iḿ working to get the FXS to do something.
  • no idea what the leds do in my config, as I don't care.
  • I'm on a old 25.12.2 without never updating/rebuilding the configuration post led migrations.

EDIT:
Led behaviour chaged in a "recent" commit:

While I don't fully like the new led interpretation you might need to adapt it for your needs.

Thank you! I solved it by looking at the board.json. So it needs to use mdio-bus.

Yes the configuration has been moved outside the device tree back to userspace.
So it is more configurable by the users.

Also take note that the net device has also been renamed from eth1 to wan.

Thanks for this super good description! I followed it and almost got it right, but then I bricked my device because of a stupid error and not paying attention to terminal output. Here's a short excerpt of the last bit of commands I sent through ssh

oot@EX5601-T1:/tmp# tar xvf openwrt-25.12.3-mediatek-filogic-zyxel_ex5601-t0-stock-squashfs-sysupgrade.bin
sysupgrade-zyxel_ex5601-t0-stock/
sysupgrade-zyxel_ex5601-t0-stock/CONTROL
sysupgrade-zyxel_ex5601-t0-stock/kernel
tar: short read
root@EX5601-T1:/tmp# ubiattach -d 9 -p /dev/mtd6
UBI device number 9, total 256 LEBs (65011712 bytes, 62.0 MiB), available 0 LEBs (0 bytes), LEB size 253952 bytes (248.0 KiB)
root@EX5601-T1:/tmp# ubirmvol /dev/ubi9 -N kernel
root@EX5601-T1:/tmp# ubirmvol /dev/ubi9 -N rootfs
root@EX5601-T1:/tmp# ubirmvol /dev/ubi9 -N zydefault
root@EX5601-T1:/tmp# ubirmvol /dev/ubi9 -N rootfs_data
root@EX5601-T1:/tmp# ubimkvol /dev/ubi9 -N kernel -s $(ls -l sysupgrade-zyxel_ex5601-t0-stock/kernel | awk '{print $5}')
Volume ID 0, size 17 LEBs (4317184 bytes, 4.1 MiB), LEB size 253952 bytes (248.0 KiB), dynamic, name "kernel", alignment 1
root@EX5601-T1:/tmp# ubimkvol /dev/ubi9 -N rootfs -s $(ls -l sysupgrade-zyxel_ex5601-t0-stock/root | awk '{print $5}')
ls: sysupgrade-zyxel_ex5601-t0-stock/root: No such file or directory
ubimkvol: option requires an argument: s
ubimkvol version 2.1.2 - a tool to create UBI volumes.

Usage: ubimkvol <UBI device node file name> [-h] [-a <alignment>] [-n <volume ID>] [-N <name>]
			[-s <bytes>] [-S <LEBs>] [-t <static|dynamic>] [-V] [-m] [-k]
			[--alignment=<alignment>][--vol_id=<volume ID>] [--name=<name>]
			[--size=<bytes>] [--lebs=<LEBs>] [--type=<static|dynamic>] [--help]
			[--version] [--maxavsize] [--skipcheck]

Example: ubimkvol /dev/ubi0 -s 20MiB -N config_data - create a 20 Megabytes volume
         named "config_data" on UBI device /dev/ubi0.

-a, --alignment=<alignment>   volume alignment (default is 1)
-n, --vol_id=<volume ID>      UBI volume ID, if not specified, the volume ID
                              will be assigned automatically
-N, --name=<name>             volume name
-s, --size=<bytes>            volume size volume size in bytes, kilobytes (KiB)
                              or megabytes (MiB)
-S, --lebs=<LEBs count>       alternative way to give volume size in logical
                              eraseblocks
-m, --maxavsize               set volume size to maximum available size
-t, --type=<static|dynamic>   volume type (dynamic, static), default is dynamic
-k, --skipcheck               skip the CRC check done at volume open time
-h, -?, --help                print help message
-V, --version                 print program version
root@EX5601-T1:/tmp# ubimkvol /dev/ubi9 -N rootfs_data -m
Set volume size to 49774592
Volume ID 1, size 196 LEBs (49774592 bytes, 47.4 MiB), LEB size 253952 bytes (248.0 KiB), dynamic, name "rootfs_data", alignment 1
root@EX5601-T1:/tmp# ubiupdatevol /dev/ubi9_0 sysupgrade-zyxel_ex5601-t0-stock/kernel
root@EX5601-T1:/tmp# ubiupdatevol /dev/ubi9_1 sysupgrade-zyxel_ex5601-t0-stock/root
ubiupdatevol: error!: stat failed on "sysupgrade-zyxel_ex5601-t0-stock/root"
root@EX5601-T1:/tmp# sync
root@EX5601-T1:/tmp# fw_setenv boot_flag 0
root@EX5601-T1:/tmp# reboot
root@EX5601-T1:/tmp# Connection to 192.168.40.1 closed by remote host.
Connection to 192.168.40.1 closed.
```

As you may notice, I downloaded the image for the t0, while the device identifies as t1. Not sure if that was the reason for the errors, but I didn't really look (I should sleep more!) and went ahead. Now the device boots into a red power LED and won't even respond to pushing the reset button with the pin.

It's not a big deal since this device was just lying in my cupboard and I wanted to repurpose it as a switch/ap, but if someone has a hint how I could still revive it I would give that a shot. (but not today, I am getting some rest now). I know there is such a thing as serial connection, I've used it on ESP microcontroller devices with an Arduino IDE or ESPhome but never tried it with a router. Would that work with a device such as this: https://nabatechshop.com/wp-content/uploads/2025/07/ESP8266-ESP-01-USB-Programmer-CH340-USB-to-UART-Adapter-min.jpg . If so, what software should I use for establishing communication?