A friend of mine recently fried one of his linksys router, a WRT54G (hardware version 2.0), after trying to upgrade the firmware. The box is old, no more warranty and all that. Since I played a bit with eWRT linux on the Linksys a while ago, he thought I might have use for a broken router (maybe as a paper-weight). Turns out the power light was blinking forever, but the routers firmware didn’t come up. I recall having seen some documents on the web on fixing a broken Linksys WRT54G firmware (search for “unbrick wrt54g”; that took me a while to find). Here’s what worked for me using linux. First, download the matching firmware for your router from the linksys website. Then I pressed the reset-button, plugged in the power (holding the reset-button down) and kept holding the reset-button down for about 5-6 seconds, and then started the process below (i.e. I typed all that beforehand, just hitting enter for the put command). The router will be on IP 192.168.1.1 and will accept firmware updates with TFTP. It seems that even is the case without boot_wait being set to on.
ifconfig eth0 down
ifconfig eth0 up 192.168.1.100
# clear your local firewall rules if you have to!tftp 192.168.1.1
tftp> mode binary
tftp> rexmt 1
tftp> trace
tftp> timeout 300
tftp> put code.bin
You might have to try several times to get the timing right. You can also check with tcpdump if you get arp-replys/pings back from the router.