Homepage Johann Hanne 
Valid XHTML 1.0 Strict
About | Projects | Gadgets | Photos | Links
Projects - uClinux on the CX82100 

The CX82100 is a ARM940T based "home network processor" made by Conexant. It runs with 168 MHz and has two integrated ethernet interfaces. As most current processors used for network devices, it can run Linux. However, it lacks a MMU, so you need a special Linux variant, called uClinux. For 2.4 kernels, you need a patchset from the uClinux web site. 2.6 kernels already have the no-MMU capabilities built-in, but there are still fixups at the uClinux web site.

I first came across the CX82100 when slashdot reported that a SOHO network equipment manufacturer named Actiontec ships a device called "Actiontec Dual PC Modem" which runs Linux, which was at a time where the now famous Linksys WRT54G hasn't yet appeared. A group of hackers quickly joined forces on the actionhack mailing list (which disappeared in 2005 without notice). All the required information which is needed to develop a GPL firmware (the original firmware contained quite a few non-GPL parts, plus GPL parts where Actiontec/Conexant did not give out the source code, i.e. GPL violations) was published on the mailing list: pinouts, instructions for building a toolchain and kernels. It should be noted that Actiontec never fully complied with the GPL. They put a huge tarball (>100 MB) onto opensource.actiontec.com, and they got positive press for it. However, the tarball was mostly useless. It contained loads of duplicate stuff, toolchains and even userland source code which was not used in the distributed firmware. The contained kernel did not work with the DPCM, it was a member of the actionhack list who distributed the necessary patches so that the kernel actually worked. Whatsoever, all this is history. After following the topics on the list for quite some time, and after it got quiet, I finally found time to take all the information and use it to compile a GPL firmware, although it took a lot of time to migrate to a current kernel (the original Actiontec kernel was as old as 2.4.6!) and to gather all the required userland stuff.

After the DPCM firmware was complete, I wondered if there were other SOHO routers built around the CX82100. And thanks to the hardware recyclement initiative and Google, I quickly found some. I purchased some of them via Ebay (you can get most devices for around 20 EUR) and then looked for a way to put Linux onto them. Unsurprisingly, none of them run Linux natively. All of them have solder points for mounting a JTAG header though. Instead of trying to use JTAG for reflashing the routers (which is a pain if you don't have some expensive JTAG equipment), I first examined the original firmware if I could trick it to flash a Linux firmware, or a boot loader capable of booting a Linux kernel via tftp. Again thanks to the hardware recyclement initiative, it is possible to dissect many firmware files, with the help of their documentation of various firmware formats.

As of 2006-02-11, I have a Linux kernel running on two devices (in addition to the DPCM):

  • Linksys BEFSX41: No big problem. You can reflash the boot loader using the original firmware via tftp. Only one of the two CX82100 ethernet ports is used, all of the 5 external ethernet ports (4 LAN, 1 WAN) are connected to the same switch chip, so the original firmware must use VLANs to separate the ports into WAN and LAN. We need to do it the same way with Linux, so we need driver for the switch chip (ADMtek ADM6996) in order to use the device in a useful manner. I don't have checked yet if such a driver exists.
  • D-Link DI-614+ (H/W Ver B2): I was able to trick the original firmware (ARJ format) into overwriting the boot loader with a Linux capable one. However, the flash writing routine put six bytes of the original boot loader into the new boot loader, so the new one was corrupted (it turned out that these 6 bytes were the device MAC address). I reflashed the router using JTAG, and this time it booted a Linux kernel via tftp. However, there is some kind of hardware watchdog (probably implemented with the Altera PLD), which resets the device after about 15 seconds. The HRI mailing list has an article about disabling the watchdog on the DI-604, so it might be possible to do the same on the DI-614+. Like in the Linksys BEFSX41, all accessible ethernet ports are connected to the same switch chip. The D-Link DWL-900AP+ (H/W Ver C2) access point is very similar to the DI-614+ (it only lacks 4 ethernet ports, as it's an access point only), so all these observations will probably apply to the DWL-900AP+, too.