After watching my router go around and around in circles, continually failing to boot, I decided enough was enough. Time to break out ROMMON tftpdnld.
I've used ROMMON before to download a TFTP image, but it's never something I remember off the top of my head. In the interests of this being my own personal wiki, and so it's here for anyone else it benefits (though it's a pretty well documented topic on Google!), here goes.
Firstly, tftpdnld will only work on the first LAN interface. (On some platforms that can be changed I believe, but I've never seen it). So make sure the cable is in the lowest number interface.
To stop the router circling, press ctrl-break. Side note here: I was using a USB-RS232 adapter. Every time I pressed Ctrl-Break I got about 3 lines of error message. Unfortunately I didn't copy them. I ended up finding an old PC with a COM port, but I've since found this tech note from Cisco
This will drop you to a ROMMON 1> prompt.
From here, the usage instructions for tftpdnld are:
usage: tftpdnld [-ur] Use this command for disaster recovery only to recover an image via TFTP. Monitor variables are used to set up parameters for the transfer. (Syntax: "VARIABLE_NAME=value" and use "set" to show current variables.) "ctrl-c" or "break" stops the transfer before flash erase begins. The following variables are REQUIRED to be set for tftpdnld: IP_ADDRESS: The IP address for this unit IP_SUBNET_MASK: The subnet mask for this unit DEFAULT_GATEWAY: The default gateway for this unit TFTP_SERVER: The IP address of the server to fetch from TFTP_FILE: The filename to fetch The following variables are OPTIONAL: TFTP_VERBOSE: Print setting. 0=quiet, 1=progress(default), 2=verbose TFTP_RETRY_COUNT: Retry count for ARP and TFTP (default=7) TFTP_TIMEOUT: Overall timeout of operation in seconds (default=7200) TFTP_CHECKSUM: Perform checksum test on image, 0=no, 1=yes (default=1) Command line options: -r: do not write flash, load to DRAM only and launch image -u: upgrade the rommon, system will reboot once upgrade is complete
The variables are set by typing:
Everything I've said here can be found at: How to Download a Software Image to a Cisco 2600 via TFTP Using the tftpdnld ROMMON Command