Linux acx100 binary driver HOWTO Author: Ivor Hewitt, ivor@ivor.org v0.6, 16th July 2003 Background: ----------- There are currently various 802.11b+ cards on the market which provide enhanced 802.11b performance of 22Mbs. All of the well known cards are based on the Texas Instruments acx100 chipset, (e.g. D-Link DWL-650+, USR, Pheenet), unfortunately thus far the manufactures of these cards have not released public Linux drivers and TI has not released technical specs to enable the development of open source drivers. However, a set of binary drivers compiled against a small selection of Linux kernels is currently available (see the Links section), the intention of this document is to explain briefly how to get them installed on different Linux distributions and what tweaks are needed to get them running. This is by no means a replacement for the development of open source drivers which are well under way (see http://acx100.sourceforge.net) but hopefully will provide a temporary solution to those people who want to try to get these cards working. Also, I hope that with more people using these drivers at an early stage, there will be feedback generated of potential problems, pitfalls and workarounds which may well be beneficial to the open source driver development. Introduction: ------------- This document is intended to explain the steps necessary to get the binary releases of the acx100 drivers up and running on distributions other than those directly listed in the binary driver package. The following table shows the available binary modules in the current binary driver package (acx100_bin_20030503.tgz), the linux distribution they were built with and the version of GCC that was used to compile them. Module Distro GCC ------------------------------------------ 2.4.18-14 RedHat 8.0 3.2 2.4.18-6mdk Mandrake 8.2 2.96 2.4.18-6mdk3 Mandrake 8.2 3.0.4 2.4.18-686 Debian 2.95.4 2.4.19-16mdk Mandrake 9.0 3.0.4 2.4.20-8 RedHat 9.0 3.2.2 2.4.21-0.13mdk Mandrake 9.1 3.2.2 Installation ------------ Make sure you have a recent enough version of wireless tools installed, the binary drivers are built with wireless tools version 15. Obtain and extract the binary driver package: "tar -xvzf acx100_bin_20030503.tgz" If you happen to be running a stock distribution that matches one of the supplied binaries, then you should be able to simply run the installation script "InstallAcx100" and skip straight to the Configuration section, lucky you. Relabelling the module ---------------------- If your distribution doesn't match, or you are using a custom Linux system then all is not lost, as long as your kernel is compatible with one of the binaries you should be o.k. The first step is to determine what you are running if you don't already know. The kernel version can be obtained using "uname -r", you should also know what version of gcc your kernel was compiled with. If you are using a distribution and didn't compile it yourself then "gcc -v" will display the version of the gcc compiler you have installed, which should match the compiler used to build the kernel. # TODO Perhaps add a list of popular distributions and their GCC versions? The table above shows the names of the modules which match the kernel versions, and the version of gcc that they are built with. You need to choose a module that matches your kernel version and gcc version. Tip: If you are using a 'stock' 2.4.21 or 2.4.19 kernel, then you will probably find that the 2.4.20 and 2.4.18 kernels respectively are a closer match than the Mandrake kernels of the same version number. Next create a subdirectory in the installation directory that matches your "uname -r" value and make a copy of the driver for your chosen kernel. The kernel file should be renamed "acx100sta-"uname -r".o. (Clearly you don't 'need' to make a copy of the file in a subdirectory named as such if you install the module by hand, but it might be handy to keep the installation all together) Then enter the new directory and relabel the kernel info on this file with the following commands: echo -ne "kernel_version="`uname -r`"\0" > version objcopy --remove-section=.modinfo --add-section=.modinfo=version acx100sta-*.o Try to install using the install script to see if this works for you. If so, just skip to the configuration section. If the module fails to initialise then you'll most likely have unresolved symbols problems. To see a list of the failed symbols, type: depmod -ae If the dependency problem is with version information on symbol names you will see a series of unresolved symbols ending in "_R" followed by a hex number e.g. "__ioremap_R9eac042a". If the missing symbols are due to mismatches between symbol name suffixes, then running the "fixscript" script on the module may solve the problem. Then try installing again. If there are still missing symbols but they appear to be just for debugging / logging, you may be able to get away with writing a small C app that creates a small stub function and then using "ld -r" to link the object file into the module. Configuration ------------- If the module loads without problems, (you will get a warning that loading the module taints your kernel, its safe to ignore this warning) and the card springs into life then you're ready for the next step.... Firstly add to /etc/modules.conf alias eth1 acx100sta Either write a start script to initialise your card, or modify your distributions scripts to work around some of the problems with the binary driver. It appears that it is necessary to repeat the iwconfig commands for the card to associate correctly with an AP with a short delay in between. Note, to change the rate of the card (e.g. to extend range) use:- "iwconfig eth1 rate X" where X is (5=22M, 4=11M, 3=5.5M, 2=2M) Generic start script -------------------- #! /bin/bash iwconfig eth1 nick "mynick" mode 2 channel 6 essid myessid ifconfig eth1 192.168.0.x #for static ip sleep 2 iwconfig eth1 key 012abc3456 iwconfig eth1 key restricted iwconfig eth1 nick "mynick" mode 2 channel 6 essid any sleep 5 iwconfig eth1 nick "mynick" mode 2 channel 6 essid myessid ifconfig eth1 192.168.0.x route add default gw 192.168.0.x Distribution specific scripts ----------------------------- SuSE ---- Create "/etc/sysconfig/network/ifcfg-eth1" : BOOTPROTO='dhcp' REMOTE_IPADDR='' STARTMODE='hotplug' UNIQUE='' WIRELESS='yes' WIRELESS_ESSID='myessid' WIRELESS_KEY='' WIRELESS_MODE='Managed' WIRELESS_NICK='' iWIRELESS_NWID='' WIRELESS_CHANNEL='6' WIRELESS_RATE='' Modify "/etc/sysconfig/network/scripts/ifup-wireless" : find "case $ACTION in" Add at the beginning of the 'start)' section insert:- ifconfig $INTERFACE up sleep 2 and at the end of the 'start)' secion:- sleep 5 With this version of the script the driver loads on hotplugging the card and the dhcp successfully obtains a lease, although for some reason occasionally the default gateway doesn't get set. so you could add "route add default gw x.x.x.x" to the start script. Mandrake 8.2 ------------ The driver should install without problems using the install script. If you have gcc3 on mandrake then you should switch the drivers in the 2.4.18-6mdk directory appropriately. Add to the end of "/etc/modules.conf": alias wlan0 acx100sta Create a file "/etc/sysconfig/network-scripts/ifcfg-wlan0" DEVICE=wlan0 BOOTPROTO=dhcp NETMASK=255.255.255.0 ONBOOT=yes WIRELESS=yes WIRELESS_MODE=2 WIRELESS_ESSID=myessid WIRELESS_CHANNEL=6 Edit "/etc/sysconfig/network-scripts/ifup-wireless": Add to the start- ifconfig $DEVICE up sleep 2 And to the end: sleep 5 "ifup wlan0" should now successfully bring up the card. RedHat 8.0 ---------- Driver should install with install script. Add to "/etc/modules.conf" alias eth1 acx100sta Create "/etc/sysconfig/network-scripts/ifcfg-eth1" DEVICE=eth1 BOOTPROTO=dhcp #change as necessary ONBOOT=yes WIRELESS=yes ESSID=myessid MODE=2 #2 == Managed #CHANNEL=6 Alter "/etc/sysconfig/network-scripts/ifup-wireless" and add to start: ifconfig $DEVICE up sleep 2 add to end:- sleep 5 "ifup eth1" should bring the device up. For some reason every other startup (i.e. bring up, take down, bring up) the association fails. Repeating the up,down will then succeed. Successful module versions -------------------------- Reports of successful versions of the binary module with different dists:- Dist Kernel Module ---- ------ ------ SuSE 8.1 2.4.21-rc2-ac2 2.4.20-8 SuSE 8.1 2.4.21-rc3 2.4.20-8 SuSE 8.1 2.4.21-rc7 2.4.20-8 SuSE 8.1 2.4.21-rc7-ac1 2.4.20-8 SuSE 8.1 2.4.19-4GB 2.4.19-16mdk SuSE 8.2 ? SuSE 8.2 2.4.20-4GB-athlon 2.4.20-8 RedHat 8.0 2.4.18 2.4.18-14 RedHat 8.0 2.4.20 2.4.20-8 RedHat 9.0 2.4.20-13.9 2.4.20-8 SlackWare 9.0 2.4.20 ? SlackWare 9.0 2.4.21-rc2-ac2 ? Mandrake 8.2 2.4.18-6mdk 2.4.18-6mdk Mandrake 9.1 2.4.19-16mdk 2.4.19-16mdk Mandrake 9.1 2.4.21-0.13mdk 2.4.21-0.13mdk Debian 2.4.21-rc2-ac2 2.4.20-8 Gentoo 1.4 2.4.20-gentoo-r5 2.4.20-8 Debian 2.4.19 2.4.18-686 Debian 2.4.20 2.4.20-8 Debian 2.4.21 2.4.21-0.13mdk Debian 2.4.22-pre2 2.4.21-0.13mdk Debian 2.5.73-bk9 2.4.21-0.13mdk Debian 2.5.73-bk10 2.4.21-0.13mdk Debian 2.5.74 2.4.21-0.13mdk Gentoo 1.4 2.4.21 2.4.20-8 Tips ---- Here's one to get you started. Once the driver is up and running, don't try experimenting changing the channel, rate etc, and then reloading the driver. Otherwise you'll likely lose the document you've been typing for the past two hours. sniff. Q. I'm getting a "No IRQ known for interrupt pin A..." message when the driver loads. A. Firstly try setting "pci=biosirq" at boot time. If that doesn't help change the PnP setting in your BIOS to 'No' Q. What kernel options do I need to enable for the driver to work? A. CONFIG_NET_WIRELESS, CONFIG_NET_RADIO CONFIG_NET_PCMCIA_RADIO. Q. I'm getting "init_module: No such device" when I load the module. A. Make sure you have yenta_socket and pcmcia_cs working. (see: http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-HOWTO-2.html) Links ----- http://acx100.sourceforge.net - main driver development project http://sourceforge.net/forum/forum.php?forum_id=257272 - acx users discussion http://www.ivor.it/wireless/acx.html - binary driver packages Change History -------------- 0.1 3rd June 2003 First version 0.2 7th June 2003 Mandrake note added. 0.3 8th June 2003 RedHat 8.0 0.4 24th June 2003 Updated success matrix, minor corrections to text. 0.5 11th July 2003 Updated matrix, added tip. 0.6 16th July 2003 Updated matrix, added tip.