Seeking safe installation guidance for OpenWRT on a TP-Link Archer C20 V5 (US version) router

Hello everyone,

I own a TP-Link Archer C20 V5 (US version) router and I’m looking to install OpenWRT on it. While researching, I found documentation and firmware for the EU version of the same router, available here.

I'm unsure if it's safe to use that firmware on my US version.

If anyone has experience with flashing OpenWRT on this specific model, I’d really appreciate your guidance. Please share the safest way to install it and any important precautions to avoid bricking the router.

Thanks in advance!

The shaky part is to combine tplink bootloader with openwrt for first install because if you make mistake there you get a solid doorstop-brick.
Check the boot log at the end of page you linked and compare mtd layout to tplink one, radio and boot should be at the same places.
For revert maybe some day, extract bootliader from same oem fw file that is running on the device.

1 Like

Thank you for the heads-up—really appreciate your caution about the bootloader step.

I've built the OpenWrt firmware locally on my Linux machine using the official OpenWrt Git repository. During the build process, I selected:

  • Target System: MediaTek Ralink MIPS
  • Subtarget: MT76x8 based boards
  • Target Profile: TP-Link Archer C20 v5

I kept the rest of the configuration options at their defaults.

As I understand, for the initial install, we need to prepend the stock bootloader to the OpenWrt sysupgrade image to create a valid recovery image. I'm planning to extract the bootloader using this command:

dd if=stock_firmware.bin of=boot.bin bs=131584 count=1

This value (131,584 bytes) appears to be commonly used in community guides, but I'm not entirely sure how to verify whether it's the correct bootloader size for my specific hardware. On the liked page however, there is no OEM boot log. Is there a reliable method (perhaps comparing the MTD layout via serial or extracting info from the boot log) to confirm this for my Archer C20 v5 US model?

Just to be safe, I'm using the same OEM firmware version that my router is currently running. After combining the bootloader and OpenWrt sysupgrade image using cat, I plan to serve the final tp_recovery.bin via TFTP for flashing.

If you have any tips on verifying the bootloader size or ensuring that the MTD layout matches properly, I'd be grateful!

Thanks again!

You need to concatenate that bootloader with openwrt.
No idea what community guides you refer to, official guide says 512b header +2 x 64k flash erase blocks
Please use web upload. Do not overcomplicate things.

I found this GitHub repo https://github.com/dxdxdt/tp-link_c20-v5.dev, and this states the following.

512 is the size of header(sizeof(struct fw_header) is 512: exb A, exb B). The actual binary that the hardware loads starts after the header.

196608(0x30000) is the size of the first boot loader region. The TFTP recovery program skips 196608 bytes of the downloaded image when copying into the flash. Stupid design if you ask me. This number(0x30000) appears on the serial output when performing TFTP reset. 0x30000 is probably the size of the first boot loader for all variants. But you can only find this out if you have the serial console. If you think it's not for your variant, well. Shotgun it(trial and error). I highly doubt it's other than 0x30000, though.

The first boot loader never touches its region(0x0 - 0x30000). The first boot loader will always be there to help you(unless you manually modified it). As long as the first boot loader is intact, you can debrick your hw. Cheers.

Should I follow it to extract the bootloader?

Dont get creative, use linux like wsl-ubuntu
They have correct point - use start of file from firmware that is already running, fact not in wiki.

i am on linux, acording to the the repo i have chnaged the command to
dd if=stock_firmware.bin of=boot.bin bs=64K count=3 64k x 3=196608 bytes

Use exclusively OpenWrt guide.
Did i note to keep creative powers down when dealing with numbers?

Sorry for that, I couldn't find a proper guide. It will be helpful if you can provide a link or something

Some smart guy posted it earlier.

1 Like

I'm really sorry — I was overthinking and didn't realize it was already there. Thank you so much for your patience and help. I’ll follow the official documentation and wiki, and I’ll try to flash the image on my router using TFTP.

1 Like

no problem, id still suggest first method from that wise guys link
https://openwrt.org/toh/tp-link/archer_c20_v5#installing_via_web-ui

I just tried the web ui installation but the image wasn't accepted. TFTP should work, I watched many YouTube videos though, any advice on this?

Try to first upgrade to same tplink version via webui and upload openwrt frankenimage after fresh start.

By frnkenimage are you referring to this?

TP-Link image:             tpl.bin
OpenWrt sysupgrade image:  owrt.bin

 > dd if=tpl.bin of=boot.bin bs=131584 count=1
 > cat owrt.bin >> boot.bin

This is used for Webui upgrade from wiki

1 Like

Precisely that.

1 Like

I Flased the stock OEM. And then flashed the OpenWRT frankenimage but got the same result. The boot.bin wasn't accepted by the device. What should I do now?

unaccept the post and wait 24-48h for somebody smarter to jump in.

1 Like

Hi, thanks for your help! I was able to successfully install OpenWRT on my Archer C20 V5 (US) using a TFTP server.

Initially, I didn’t get access to the Web UI because it was a snapshot build, and I hadn’t included LuCI in my build configuration. However, I managed to install the LuCI package manually by SSH into the router.

Everything seems to be working well now, and I’ve configured it properly. However, I have one issue: my router is dual-band. On the stock firmware, the 5GHz band worked flawlessly, but with OpenWRT, the 5GHz band isn’t showing up. I’ve used the same configuration as the 2.4GHz band (with all defaults), but the 5GHz SSID doesn’t appear on my phone.

Should I create a separate topic for this issue, or could you help me here?

5ghz radio requires setting country code and makes you wait 1-10min for radar scan to complete before appearing. if hardware supports the feature you can avoid long waits later enabling background scans like on openwrt one Use background_radar by default - #3 by brada4