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.
|