This work is licenced under a Creative Commons Licence.
I was playing around with various firmware versions for the WRT54GL the other day and, without thinking, I attempted to flash the wrong firmware. The power LED flashed rapidly, and stayed flashing when power was applied; none of the normal (simple) resetting methods worked.
I thought that I was in real trouble when the thing did not even respond to ping. This suggested that I needed to use JTAG to recover, which is annoying and requires soldering.
However, all was not lost: I realised that part of the issue was that the router wasn't providing DHCP (unsurprisingly). Accordingly, if I set my network configuration to static, and my gateway to 192.168.1.1 (the router's default IP), and assigned myself an appropriate IP (e.g. 192.168.1.101) then I *could* ping the router.
Therefore, recovery was just a simple matter of using atftp (available in the Ubuntu repositories) to transfer a legitimate firmware across. I downloaded a "mini" firmware from the DD-WRT website (note that non-mini firmwares would not work in this scenario - you have to treat it as an initial flash even if you have previously flashed DD-wrt) and then used the following command:
atftp --option "mode octet" --verbose -p -l path/to/mini_firmware_version.bin 192.168.1.1
I was pinging the router constantly in the background, and upload occurred rapidly, and then the router stopped responding to ping for about 2 minutes before responding again. I was able to login to the router's web interface, reset to the default settings, and connect via DHCP etc.
Now... to get it to connect to my other wireless router properly as I was trying before I got sidetracked.