TL-MR3020 v3 is similar to the original 3020, except it seems the firmware has a different layout.
I've tried trimming both the first 256 and also the first 257 bytes from the stock firmware, which allows it to be flashed, but then it gets stuck in a boot loop and is unreachable (I can re-flash wrt and it works fine).
How should I modify the stock firmware to trim off the offending bootloader code?
I would strongly recommend against this. You should download the firmware that is designed for the hardware you have (v3). You can find that here:
I suspect that TFTP recovery will be the most straightforward approach. With TFTP, you probably don't need to modify the vendor firmware to install it. Information about TFTP recovery for your device is in your device info page for the v3:
That has done it, thanks. Please add this to the v3 wiki, as I couldn't log in.
===== Restoring Original Firmware =====
-> [[docs:guide-user:installation:generic.uninstall]]
{{page>meta:infobox:dangerous&noheader&nofooter&noeditbtn}}
With the TL-MR3020 v3 router, there is a catch: the stock firmware is obtained from the OEM: http://www.tplink.com/en/support/download/?model=TL-MR3020
Using the method with tftp described in "Installation". (you still need the firmware images without the boot part). Only cut off 512 bytes. Tested working with V3.20_210428.
<code>
dd if=stock.bin of=tp_recovery.bin bs=512 skip=1
</code>
It is also possible to revert to the stock firmware from within OpenWRT (this method is untested):
Cut the first 0x20200 (that is 131,584 = 257*512) Bytes from original firmware:
<code>
dd if=stock.bin of=sysupgrade.bin bs=512 skip=257
</code>
You can flash the firmware over the web interface.
Otherwise should transfer the firmware image to the /tmp folder and run sysupgrade over ssh:
<code>
sysupgrade /tmp/sysupgrade.bin
</code>