Installing a Conexant PCI ADSL modem on Debian Sarge 2.6
Conexant-based PCI ADSL modems are now very low in price - I've just (October 2006) bought several from ADSL Nation in the UK for about £15.00 each. I wanted a Linux-based router/firewall with ADSL connectivity and since the things are allegedly usable with Linux that was what I chose.
Making them work took longer than I expected but it's done now. As a note to myself and anyone else wanting to do the same, here is my step-by-step guide to installing them on Debian Sarge with a 2.6 kernel. You are going to have to build a custom kernel and a set of drivers from source - set aside 2-3 hours.
Step 1 - install the hardware device and Debian
I installed Sarge from the net install disk, selecting only basic server functionality - core kernel, web services and DNS, choosing the 2.6 kernel (by typing 'linux26' to the installer prompt) and did the usual stuff to install Debian. Following the install, apt-get dist-upgrade was done to ensure everything was up to date.
The PCI modem was in the box at this point. Logged in as root, lspci showed two lines containing the following:
0000:00:14.0 System peripheral: Conexant ADSL AccessRunner PCI Arbitration Device (rev 01) 0000:00:14.1 ATM network controller: Conexant AccessRunner PCI ADSL Interface Device (rev 01)Initially that wasn't the case and I wasted a lot of time trying to make the device work. It looks as if that was due to it being incorrectly seated in the PCI slot (aaagh). Substiting it with another one fixed the problem, then replacing the original also gave the correct behaviour. If you don't see two lines looking very similar to the above, you will have a problem.
Step 2 - Install the stuff you are going to need
Following instructions from the invaluable sources listed below, the next step was to install various things I either knew I'd need or was told I'd need. The kernel sources are installed as a bzipped tar archive, so you will need to un-tar them. The driver-building process expects the kernel headers to live under /usr/src/linux so I created a symbolic link to the now-unpacked source tree, as shown:
apt-get install libatm1 libatm1-dev bzip2 kernel-tree-2.6.8 libncurses-dev kernel-package cd /usr/src tar xfj kernel-source-2.6.8.tar.bz2 ln -s kernel-source-2.6.8 linuxThis is a rather long-in-the-tooth kernel now; perhaps I should have picked a later one, but I didn't.
Step 3 - build a custom kernelIf the ADSL driver wasn't so fussy about the kernel it's built for this would be unnecessary but you have no option. I copied the kernel configuration that's stored in the /boot area into the kernel tree and edited it by hand to turn off the kernel PREEMPT option. These notes here are from memory so don't just copy and paste them, check that the filenames are correct on your system!
# cd to the source directory cd /usr/src/kernel-source-2.6.8 # Copy the existing kernel configuration for use by menuconfig cp /boot/config-2.6.8-2-386 .config # At this point I used a text editor on .config to turn off CONFIG_PREEMPT # CONFIG_PREEMPT=n # then used 'menuconfig' to choose a 586 processor type and then saved the configuration make menuconfig # Build the new kernel (this takes quite a long time, about 3 hours on the low-powered VIA motherboard I used) make-kpkg --initrd --revision=custom.1.0 kernel_image cd .. # Install the newly-build kernel package dpkg -i kernel-image-2.6.8_custom.1.0_i386.deb
Step 4 - download the ADSL driver softwareNOTE NOTE NOTE: this document originally contained a link to Patrick Mackinlay's site as mentioned in this highlighted section:
tar xjf driver-2.6-latest.tar.bz2 cd CnxADSL-6.1.2.007-PIM-2.6-1.5 makeThe driver expects a RedHat layout of your /etc/init.d stuff so you have to fake what it expects before doing the make install and then move the startup script by hand afterwards.
mkdir -p /etc/rc.d/init.d make install mv /etc/rc.d/init.d/cnxadslctl /etc/init.d rm -rf /etc/rc.dThe startup script (cnxadslctl) contains another RedHat-ism, so find the two lines in /etc/init.d/cnxadslctl reading
# Source function library. . /etc/init.d/functionsand remove them - the script doesn't appear to need them.
You are almost finished now. You have built the kernel and installed the driver modules. Reboot your system and start the new kernel (grub will default to the old one, so edit /boot/grub/menu.lst and change the default kernel).
There are various ways you can set up your pppd configuration but I did the following
In /etc/init.d/cnxadslctl change the line that starts pppd to read pppd file /etc/ppp/adsl, then create the file /etc/ppp/adsl with the following contents:
passive defaultroute usepeerdns noauth name [Your user name] user [Your user name] password [Your password - note on line below 'password'] plugin /usr/lib/pppd/2.4.3/pppoatm.so 0.38 holdoff 4 maxfail 0The 0.38 above is the VCI/VPI combination needed for your provider, 0.38 is what's used in the UK, but I've seen 0.100 used in New Zealand.
Start the ADSL linkHaving done all that, with the ADSL line plugged in to the card
/etc/init.d/cnxadslctl startbrought up the link to my ISP and all appeared to be working. To automate the startup script on boot you might like to try update-rc.d cnxadslctl 14.
All I have done is to copy with some minor alterations the information from the following sites, to which I'm hugely indebted