Take a look at Mike Anderson and JTAGs. This is a really enlightening explanation of how to debug embedded linux devices w/ JTAG support, and it gives some great pointers for writing linux device drivers.
Mike Anderson is the Chief Scientist for The PTR Group, Inc. and really knows embedded linux devices. I didn’t get to attend the conference, actually I stumbled across this while working with the Linksys WRT54G-TM device.
The 54G-TM is a T-Mobile branded device, that apparently was (or maybe still is) sold by T-Mobile along w/ their WiFi capable phones. I guess the idea was that if you were within range of your 54G-TM, the call would run ala VOIP, otherwise it would use the actual cell network.
The device is great – the board layout has pads that male headers can be easily soldered onto. HairyDairyMaid includes schematics for a parallel port based JTAG cable, which can then be used to install DD-WRT, or whatever.
(If you look at the lower portion of the board you’ll see where JTAG headers are soldered)
As far as I can tell, using JTAG to directly write to flash is the only way to upload the firmware to the device. (TFTP and HTTP both fail). This 54G-TM also has a cpu fan soldered to the board and a heatsink installed on the CPU. (I didn’t do this myself, I actually bought this one that way. I have added headers to the other 4 I have, and flashing a 7.7M image of DD-WRT took 25423 seconds to complete on each device.)
Watch the video, it’s enlightening and Mike’s got a good sense of humor.