OpenWRT for TP-Link Deco x55

I wish I even remotely had the skillset to help but getting x55 support would be great. It’s a very popular unit.

I know people are probably aware of this but I’ll say it just incase. Knowing what version would be really beneficial because the versions for the x55 are a nightmare. In US there are 4 different versions: v1, v1.26, v1.32 and v1.60: https://www.tp-link.com/us/support/download/deco-x55/

In France they have v1, v1.26, v1.30, v1.32 and v3: https://www.tp-link.com/fr/support/download/deco-x55/

The UK has v1, v1.30 and v3: https://www.tp-link.com/uk/support/download/deco-x55/

v1 units are likely similar but if the Archer AX23 is to be believed, a full version number change (to v3) generally means they completely changed the hardware. The AX23 moved from Mediatek to Qualcomm.

If this Reddit comment is to be believed then v3 of the Deco X55 is the MT7981: “Deco X55 v1 has Qualcomm IPQ5018 SoC. This one is being actively worked on so hopefully in the next 3-6 months someone will add support for it.

Deco X55 v3 has Mediated MT7981 which should make it easy to add support right now.”

1 Like

Correct! That was my research too, and mine which is v1.6 does have the IPQ5018.

The GPL code was not available readily when I started this project, and it is now. I'm now currently going through it trying to find what I need. Hopefully I'll have an update soon!

1 Like

if anyone has serial access to it, adding support for it should be relatively simple. As @slh mentioned, start by copying the entire boot log here from running stock firmware (dmesg).
Then copy the /sys/firmware/fdt file to your PC and upload it somewhere here (or share a link).
Run cat /proc/mtd and paste the output here.

Sadly, While I do have serial access I do not have shell access when the device is up and running. I have access to U-Boot and a shell if I boot my own initramfs. If you have a tip on how to get shell access that would be super useful.

Here is the boot log that I have from the serial output

I had to stop working on it for the evening, but I made some decent progress (I think?) on getting my own DTS file created using the GPL code they provided. I've been able to get it to boot into initramfs, and it even has a physical link up! However, I'm now struggling with getting it to produce a serial output when it's past u-boot.

I'm mostly stumbling my way through this, so any tips or advice would be greatly appreciated :smiling_face:

I haven't had a chance this week to work on this project, but I wanted to re-ping this thread in case anyone has any ideas of how to get shell access of UART for the stock firmware :slight_smile:

Stumbled upon this thread today. Curious if you were ever able to get through to the shell. Hoping i could help anyway possible. And curious to know if you tried anything else to get access?

I got a couple of these bad boys at home so would love to get them onto openWRT

Sadly I had to divert my attention to interviewing, so I haven't had the chance to continue this process.

I am planning on imagining the device with a custom firmware in hopes to get access. I won't be home until the 15th to try though:/

Not a problem! Good luck with it all! I understand having only so much bandwidth. Still waiting for my kit to come in so i can follow your initial steps. There has to be to force a console during the boot like a safe mode or something.

There's gotta be something, I just haven't figured it out yet.

Let me know what you discover!

I believe you have to type in tpl right after booting to get shell access. Search threads on this forum for other TP Link devices..

That gives you shell access to u-boot, but not to the stock firmware. I could absolutely be missing a simple step

@thefsm93 Thanks for all the information here. I'm attempting to do the same with my TP-Link Deco X55 Pro which has the MediaTek MT781 and MT7976 (which are already in supported devices).

I was able to get access to the serial console UART to view the boot logs, but I see that it has an absolutely miniscule pull-down resistor on the RX line so I can't currently send any commands. I'm using a FT232RL based USB-to-UART serial converter set to 3.3v for communication.

Did you have to remove a resistor like that or make some other change to get your Raspberry Pi connection to work?

Heyo! I'm glad to see others are giving this a go!

To answer your question, I didn't do anything hardware-wise to bypass the pull down resistor. I am able to send commands to the device when in u-boot.

I've struggled to get my compiled firmware to take commands or output logs to/from UART though. I am using a Raspberry PI for the connection.

Were you able to get into U-Boot? Start there, and see if you can send commands. The base image doesn't accept commands from UART

I guess I was chasing my tail trying to login to the shell... I was able to get into the uboot cmdline and send commands. I now have a ton of information on the x55 Pro device and image storage layout.

It is looking way different than the base x55, so I'll eventually probably start a new thread for it. I wasn't able to tftpboot it, due to the missing support for the 2.5G NICs in uboot. But I was able to transfer a initramfs for another very similar router via the serial line using kermit and then get it to boot that and poke around.

Appreciate the inspiration :slight_smile:

Let me know if you end up being able to compile your own image, and get to a CLI via the UART ports. That's my single hold up now is it boots my image, but I can't get it to communicate over UART :confused:

If you use the ipq5018-pz-l8.dts the UART works and you can poke around in the shell (but the networking doesn't work). If your DTS brings up the network, can you try bringing over some of the components from that DTS to get the UART working? I'd like to get it fully booted so I can dump the MTD partitions on the NAND and extract them off.

EDIT: I'm currently dumping the partitions and capturing via serial instead of via network. Might be helpful if I can do the same with the kernel image/partition to get the stock firmware compiled device tree....I think that should be possible.

EDIT2: I successfully mounted the vendor rootfs locally on my dev machine. Interestingly, the mtd11 rootfs UBI also contained img-1983491734_vol-kernel.ubifs, which turns out is:

./img-1983491734_vol-kernel.ubifs: Device Tree Blob version 17, size=2177912, boot CPU=0, string block size=108, DT structure block size=2175972

Ok, its ugly....but I did manage to get the rootfs properly extracted. Looks like they used a custom compressor for the UBFS implementation based on XZ. Had to do some funny business to get the files extracted. Also was able to decompile the dtb back to a dts. Recompiling a custom kernel with the DTS seemed to hang the UART, but I haven't looked into why yet