Conexant PCI ADSL Modem Setup Notes for Linux

IMPORTANT: These notes are very out of date. The most current resource for information and drivers for the Conexant PCI ADSL modems is maintained by Patrick Mackinlay at:

The following text was originally posted to the forums within a discussion about getting the Conexant chipset PCI ADSL modems to work under Linux. These modems are sold very cheaply online, and come with Windows drivers (that work out of the box) and Linux drivers, which unfortunately take a bit more work to get functioning. Below I detail my experiences with getting the modem to work and what I did personally on my system.

I originally thought I'd lost this in the depths of the messageboard archive, but I had brainwave, grepped an old copy of my Mozilla cache directory and lo and behold, I found it! So here it is, to help anyone who's going through a similar process. Note that I am giving no guarantees that your system will work at all; this merely describes the success I had, and how I got there. My system has been running excellently with this very setup for four months now. FWIW, my ISP is Zen Internet and they're bloody great - I wholeheartedly recommend them.

Note: Andrew Lord has posted more detailed instructions from his Mandrake 9 set-up over here. These are a bit more extensive and up-to-date than mine below. My setup is still running fine seven months later; however, given the cheapness and propensity of standalone DSL routers these days, when I upgrade, I'll probably buy one.

After much huffing and puffing, I finally got the drivers for the infamous Dabs Conexant PCI modem to compile and happily insert into a fresh stock 2.4.18 kernel. Note that this isn't for the faint of heart, and indeed may not work at all on anyone else's machine - help and comments much appreciated!

Anders' instructions helped a lot, although there were some crucial differences, which I'll detail below.

First of all, my system is a PII/333 workhorse with 320mb of RAM, running Mandrake Linux 8.1. I installed the card along with a Netgear FA311 ethernet card, which turned out to be very picky about the PCI slot it was put in. Once I'd sorted all that out, I got on with compiling the driver...

I took a stock 2.4.18 kernel, configured it to my hardware needs and enabled the vital bits for ADSL - ATM support (in Networking) and PPP support (in Network Device support), with PPP over ATM. I chose to compile all these vital bits into the kernel statically - I tend to only modularise hardware drivers and the like. Statically compiling things in also reduces the risk of annoying 'Unresolved symbol' errors. Note: When compiling a brand new version of kernel for your machine, remember to copy the file that's created in the kernel source tree by 'make modules_install' to your /boot directory. This is used to resolve module symbols, and if it doesn't match up with your new kernel, you'll get all sorts of horrid errors on boot.

Once the kernel was happily booting, I turned to the Conexant drivers. As in Anders' post, I had to hack the Makefiles a bit, mainly to change the compiler to gcc instead of kgcc (grepping the Log.txt file in the driver revealed that this was done because the version of gcc distributed with Redhat 7.1 was vausing problems with the driver. kgcc under Redhat is an older version that worked, so instead of fixing the driver, they just set the Makefile to compile with the older gcc. Nice solution.. ), and change the kernel version to the one I was compiling the driver against (2.4.18). As I'd untarred the kernel source into /usr/src (remembering to back up the old kernel's source files just in case!) I think the driver found all the include paths fine, so just did a make, make install and that was it - the module CnxADSL.o was placed into /lib/modules/2.4.18/misc, and all was well.

The thing I had to do that hasn't been mentioned before is hack the init.d script supplied with the driver, 'cnxadslctl'. On 'start' it tried to insmod both the modem driver and a module called 'br2468' (I think) which isn't supplied with the stock kernels and isn't supplied with the Conexant driver either. As bridging isn't needed for PPPoATM mode, I'm assuming this can be left out, so I hacked the script so it didn't try and load it. I also fixed a few minor bugs in the script, like it expecting 'stat' not 'status' as an argument (which is non-standard, and not what the usage says!). (Email me at if you want my version and I'll send it to you).

Note: I've put the script online for you: click here to get it!

I added the script to the startup sequence (with 'chkconfig --add cnxadslctl') and rebooted. Lo and behold, when booting, the script ran and loaded the driver. Note that you can't just 'insmod' the driver manually - the script adds some extra parameters to get the module to load happily, taken from the config in /etc/Conexant).

Running '/etc/rc.d/init.d/cnxadslctl status' brought up lots of useful information (from a file in /proc, so at least they've done that properly), so I'm taking this as a good indication that the driver is happy in my kernel and is going to work.

As for pppd, I couldn't get the patched source tarball to compile on my system *at all*, so I just installed the RPM - which I always hate doing, but needs must! I might try and fix this at a later date for the benefit of humankind.

Now all I have to do is wait for my ADSL to be activated.. hopefully tomorrow.

Hope this helps anyone. With a little bit of work, Conexant could make the driver much easier to install over a stock kernel (and maybe actually update the driver, given that it's nearly year old). They really ought to get their finger out - they must be selling these things at a rate of knots.

Author: Paul Tweedy <>
Last updated: 4/2/2003