Yesterday I did some cleaning on my WRT54GS... I removed packages not used anymore, being happy to see "can't remove XXX because it is necessary for YYY". Then my ipkg stopped working. One step up I noticed I removed libgcc, which was obviously necessary for system to work.
The network still worked ok after that, but I was no longer able to get into router (guess, shell nedeed libgcc )
After a reboot - total failure, nothing went up. I bricked it.
But - I'm stubborn. If I bricked it already, I can't do much more harm. I had archived pages from OpenWRT.org, few different FLASH images and, as a last resort, JTAG cable (screw the guarantee, anyway voided by OpenWRT).
First of all, I checked and boot_wait hopefully was operational. Then (against the rules) I tried to tftp WhiteRussian again. No success, but boot_wait still worked. Sigh...
Next, I tried to flash dd - started flashing and PWR led flashed to the et(h)ernity. Screw it, I did a power cycle. Didnt wake up, but boot_wait was STILL OPERATIONAL.
Next I flooded it with original software from Linksys. It did flash correctly, did a reset and woke up. I entered a long seen WWW pages to discover - these were not original but DD pages! What the heck? Long-term memory?
Last, I got into firmware update page and finally flashed back my beloved OpenWRT. To my surprise, my /root/ directory somehow survived the whole mess and after switching from telnet to ssh I was able to log-in using my pubkey... Weird...
So as last words:
1) If you brick your router, don't panic. Most firmware activates boot_wait, which is your friend.
2) Having boot_wait, feed your router with ORIGINAL LINKSYS software.
3) It should wake up, at least enough to feed it with desired flash.
And last-last word - please somehow protect critical packages from deletion. Perhaps you should make a dummy read-only package SYSTEM and make it depending on all necessary ones. This would give at least a warning during doing something stupid...