Personal home page for:
Patrick Mackinlay
Home | Contact |

Linux installation help for PCI ADSL modems based on the conexant chipset

PCI ADSL modems based on the conexant chipset are sold by many online retailers such as dabs. This document describes how to install and setup this modem on GNU/linux (IA32 only) for use with ADSL provided by BT in the UK, however this should also serve as a guide for other ADSL providers that use PPP over ATM.
These instructions should be distribution independant, for notes regarding particular distributions see the distribution section.
Once you have installed the actual PCI card in your computer you may check if you have the correct chipset with the following UNIX command:

/sbin/lspci

The resulting output should contain the lines similar to:

00:0b.0 System peripheral: Unknown device 14f1:1610 (rev 01)
00:0b.1 ATM network controller: Unknown device 14f1:1611 (rev 01)

Newer linux distributions may have an updated PCI device database and hence the output would be similar to:

00:0b.0 System peripheral: Conexant ADSL AccessRunner PCI Arbitration Device (rev 01)
00:0b.1 ATM network controller: Conexant AccessRunner PCI ADSL Interface Device (rev 01)

Important general considerations

There are many driver versions, ppp over atm versions and atm utility versions on the internet. If you are using the instructions on this site then you must use the source code on this site and you must remove any previous installation of the software. Do not expect any help from me if you do not use the source code listed in the resources section of this site and whose link anchor is referenced with the text download from this site. This installation procedure is not for novices! If you are a novice I suggest you find a GNU/linux distribution that supports your adsl modem.

This driver includes object code (dpcontroller.o) provided by the manufacturer that was compiled for IA32, so this driver will not work on any 64 bit versions of linux.

1. Kernel and gcc compatibility

The only kernels I have test and will test are those released from kernel.org (tested 2.4.19, 2.4.21, 2.4.23, 2.4.29, 2.6.9, 2.6.11.3, 2.6.20). If you are using a kernel provided by a vendor such as RedHat or SuSE you will need the kernel sources, please note that I will not necessarily answer emails regarding kernels from third parties, they are modified with their own patches and it is often not trivial to find out what changes they have made. You may find some contributed distribution specific information in the distribution section. You may check your kernel version with:

uname -r

I have tested the installation process with older (gcc 2.96) and newer (gcc 3.2.2, gcc 3.3.3) gcc versions and they both work. If your system uses a gcc version newer than 3 then you will need a newer version of binutils (tested 2.13.90.0.18 20030206). You may check your gcc version with:

gcc -v

You may check your binutils version with:

ld -v

Note: There are unconfirmed reports that this does not work with gcc 3.4 (distributed with Fedora Core 3)

2. Kernel modules required

Your kernel will need to support the functionality listed below, if it does not you will have to recompile your kernel. Required functionality:

Kernel configuration sectionDescription.config DefineStatusKernels
Networking optionsAsynchronous Transfer Mode (ATM)CONFIG_ATMOn2.4.*, 2.6.*
Network device supportPPP (point-to-point protocol) supportCONFIG_PPPOn2.4.*, 2.6.*
PPP over ATMCONFIG_PPPOATMOn2.4.*, 2.6.*
Processor type and featuresUse register argumentsCONFIG_REGPARM
See below
Off2.6.*
CONFIG_SMPOff (suggested)2.4.*, 2.6.*
CONFIG_PREEMPTOff (suggested)2.4.*, 2.6.*

Some of this support may be experimental so ensure you enable such drivers in the code maturity level options. If you choose to compile the above support as modules then the resulting module will be pppoatm.o and should be loaded at boot time with:

/sbin/insmod pppoatm

Important note: Linux 2.6.* users should note that their kernel must be compiled without the "use register arguments" (CONFIG_REGPARM) option. Newer kernels (at least 2.6.20 onwards) no longer allow you to to turn off this option in the config file so you will have to edit the kernels main Makefile manually and remove this option! You will have to find the line that sets CFLAGS and remove the otions -mregparm=3 -freg-struct-return.
For example, if you have downloaded and untarred linux-2.6.22.19, in linux-2.6.22.19/arch/i386/Makefile there will be this line:

CFLAGS += -pipe -msoft-float -mregparm=3 -freg-struct-return

it needs to be replaced with:

CFLAGS += -pipe -msoft-float

3. Tools and libraries required

In order to compile the driver you will need the tools and libraries for ATM. This package is already present on your system if you have the file:

/usr/include/atm.h

If you already have this package it is suggested that you replace it with the version found on this site. You can install ATM for GNU/linux using the usual configure, make procedure, similar to:

bzip2 -d linux-atm-2.4.0.tar.bz2
tar xvf linux-atm-2.4.0.tar
cd linux-atm-2.4.0
./configure --prefix=/usr
make
make install

On some more recent linux distributions this package will not compile, if this is the case and the kernel module does not compile then it is suggested that you replace the /usr/include/atm.h with the one used in your current kernel. You may do so by changing directory to the root of your kernel (usually /usr/src/linux) and typing:

mv /usr/include/linux/atm.h /usr/include/linux/atm.h.bak
cp include/linux/atm.h /usr/include/linux/atm.h

4. Compile and install the linux kernel driver

You will need to compile and install the pci conexant adsl GNU/linux driver. Firstly make sure you have your kernel sources in /usr/src/linux, if your sources are elsewhere then create a symbolic link. The commands below are for the 2.2.x and 2.4.x linux kernel versions, if you have a 2.6.x kernel you my try the version of the 2.6.x driver, but this is a test driver and you will have to change the commands below accordingly. If you download the driver from this site it may be compiled as follows:

bzip2 -d driver-2.6-latest.tar.bz2
tar xvf driver-2.6-latest.tar
cd [New directory created]
make
make install

This will create and install the kernel module and the init scripts. Depending on your GNU/linux distribution, you may also have to rebuild your module dependancies with:

/sbin/depmod -a

5. Compile and install PPP over ATM

You will need to compile and install PPP with the PPP over ATM plugin. If you download the PPP source from this site you may compile and install it as follows:

bzip2 -d ppp-2.4.0b2-patched.tar.bz2
tar xf ppp-2.4.0b2-patched.tar
cd ppp-2.4.0b2-patched
./configure --prefix=/usr
make
make install

6. Configure PPP to connect to your ADSL provider

In the directory /etc/ppp there are a number of files used to configure PPP, you will have to edit these files and put in the correct settings for your ISP. The following example configuration files work for ADSL provided via BT in the UK. The /etc/ppp/options file contents:

# Uncomment the following line if you have routed ADSL
#[IP address of router]:
# Uncomment the following line for debug information
#debug
passive
defaultroute
usepeerdns
noauth
name [Your user name]
user [Your user name]
plugin /usr/lib/pppd/plugins/pppoatm.so
# The following line is the [VCI].[VPI] number of your provider
0.38

The /etc/ppp/chap-secrets file contents:

# Secrets for authentication using CHAP
# client server secret IP addresses
[Your user name] * [Your password]

7. Start ADSL connection to the internet

Finally to start your ADSL connection type:

/etc/init.d/cnxadslctl start

Any error/status messages will appear in the global log file /var/log/messages. If all is OK you should have log lines like:

Mar 25 23:06:29 blackhole pppd[19440]: Plugin /etc/ppp/plugins/pppoatm.so loaded.
Mar 25 23:06:29 blackhole pppd[19440]: PPPoATM plugin_init
Mar 25 23:06:29 blackhole pppd[19440]: PPPoATM setdevname_pppoatm
Mar 25 23:06:29 blackhole pppd[19440]: PPPoATM setdevname_pppoatm - SUCCESS
Mar 25 23:06:29 blackhole pppd[19441]: pppd 2.4.0 started by root, uid 0
Mar 25 23:06:29 blackhole pppd[19441]: Using interface ppp0
Mar 25 23:06:29 blackhole pppd[19441]: Connect: ppp0 <--> 0.38
Mar 25 23:08:51 blackhole pppd[19441]: local IP address 213.253.36.17
Mar 25 23:08:51 blackhole pppd[19441]: remote IP address 217.41.128.64

You can check on the status of your modem with the following command:

/etc/init.d/cnxadslctl status

The output of this will let you know if your line is synchronised and give you further information and statistics.

Distributions

Below you can find a list of verified working distributions. However, all distributions should work if you compile everything from sources and follow all the steps in the above instructions to the letter.

VendorVersion information
RedHatVersion 9.0 works with 2.4.x kernel driver.
FedoraCore 2 works with the 2.6.x kernel driver but has some header file issues which can be fixed by following these notes.
Core 3 is known to work with the 2.6.9 kernel, however later kernels released as updates do not work (Use the official kernel).
MandrakeVersions 10.0 and 10.1 work with the 2.6.x kernel driver and do not require steps 2, 3 and 5

Resources used

Some or all of these resources are required:

Resource nameSource website
Linux KernelLinux Kernel Archives
Tools and libraries for ATMATM on Linuxdownload from this site
Conexant PCI ADSL linux drivers (2.2.x and 2.4.x)download from this sitehistory
Conexant PCI ADSL linux drivers (2.6.x)download from this sitehistory
PPP with PPP over ATM pluginPPPoATM for linuxdownload from this site

Historic resources

Resource nameSource website
Older conexant PCI ADSL linux driversThe Mad House conexant driversdownload from this site

Other installation guides

  1. Conexant PCI ADSL modem installation guide for Fedora Core 3 systems. This site offers a complete guide on how to install the driver on FC3 using New Zeland telecom.
Contact MeDesigned for w3c compliance (XHTML and CSS).Mar 17 2012