LinuxWirelessLAN

Linux Wireless LAN Support

As ever, the Linux community provides excellent support for wireless LAN on Linux. No one seems to have a definitive guide of how to get it going though, so I thought I'd write up my experiences (of nothing else, this will add to the bits and bobs of information that are around on the subject!).

Background

I have a Redhat 7.3 system (from Digital Networks UK). DN-UK compile in a slightly modified kernel into the factory installed systems. I'm not sure what this is actually for, and I suspect has little relevance here. My system is a desktop, and has no PCMCIA slots, so I bought a PCI card that gives my system a single slot. I bought this PCI card from Seg Communications here in the UK. The card doesn't have any decent manufacturer identification on it, but works fine if you compile a kernel with a couple of extra options in it (more on that subject later).

Wireless Cards

Initially, I bought an XI325H card, again from Seg (info). It's completely unlabelled, and so gives no information about the manufacturer or the card's chipset. I hacked about with this for a bit, and then bought a Netgear MA401, which I got working quite easily. I then found my XI325H also worked fine with the same config as the Netgear.

When starting out in this field, I would suggest buying a branded card that is listed as supported on the 62 compatibility list.

How to Get it Going

First of all, the kernel (2.4.18, in my case) needs to be compiled with PCMCIA support. I personally took the opportunity to put in a few other bits and pieces as well. Take a look at my .config file for full details (don't use my .config directly though!). Essentially, I enabled Intel I82092 and I82365 chipset support to get my PCI/PCMCIA bridge card to work. There's not a great deal of feedback as to the success of this, so watch the bootup messages very carefully!

Also, I made all PCMCIA devices into modules, the intention being that this would mean my system would pretty much support any PCMCIA device I put in to it. All PCMCIA support is via modules, so there's no benefit compiling them in to the kernel, and no harm making them all modules.

Secondly, I installed an RPM from the Redhat CDs (or get it from the website). I put on the pcmcia-cs package to get /etc/pcmcia/* files. Also, the wireless tools package is required (to give you things like "iwconfig" to actually set parameters in wireless devices). This package should also be in the distribution, but I got wireless-tools-21-3 from rpmfind.net and used that.

To recap, by now the system should have PCMCIA capabilities, have kernel modules for a number of different devices, have /etc/pcmcia/* configuration files and also have utilities such as "iwconfig".

I'm sure there are smarter ways to do this, but I found a reboot here got everything running as it should. The PCMCIA subsystem started at boot time, so "cardmgr" was running. Once the system was fully running, I ran "tail -f /var/log/messages" to keep an eye on the messages from "cardmgr". I then inserted the card and found that "cardmgr" reported the card was unsupported.

I then added the following entries to /etc/pcmcia/config:

card "NETGEAR MA401RA Wireless PC"

  manfid  0x000b, 0x7300<br />
  bind &quot;orinoco_cs&quot;29

I found you can safely stop and restart the PCMCIA subsystem by running &quot;/etc/rc.d/init.d/pcmcia stop; /etc/rc.d/init.d/pcmcia start&quot;. This time, the messages reported that the orinoco_cs driver was not present an that the resource was temporarily unavailable.

This (still) confuses me. The Orinoco driver is supposed to be part of the kernel, yet I can't find the option that gets it compiled as a module. Anyone know what I'm missing?

I downloaded orinoco-0.12.tar.gz from http://ozlabs.org/people/dgibson/dldwd/ and compiled and installed it as per it's instructions. Then, restarted the PCMCIA subsystem again, and re-inserted my Netgear card. This time, it worked, reporting:

Apr 18 14:55:22 localhost cardmgr[603]: initializing socket 0
Apr 18 14:55:22 localhost kernel: cs: memory probe 0xa0000000-0xa0ffffff: clean.
Apr 18 14:55:22 localhost cardmgr[603]: socket 0: NETGEAR MA401RA Wireless PC CARD
Apr 18 14:55:22 localhost cardmgr[603]: executing: 'modprobe orinoco_cs'
Apr 18 14:55:22 localhost cardmgr[603]: executing: './network start eth1'
Apr 18 14:55:22 localhost cardmgr[603]: exiting

I found that although all this had taken place, the card still would not communicate with the Access Point. I later found that this was due to the /etc/pcmcia/wireless.opts file. I originally had an entry for the specific hardware address of the Netgear card, but I found that making that a wildcard worked fine (after all, I want the system to configure any wireless card in the same way, so actually that's fine).

I also found I had to play about with /etc/sysconfig/network-scripts/ifcfg* files to get the wireless interface to actually get the IP address I wanted and so on. Since I wanted to use the wireless interface for everything, and not to use the built in wired ethernet, I set&quot;ONBOOT=no&quot; in &quot;ifcfg-eth0&quot;. Since the wireless device came in as eth1, I just copied &quot;ifcfg-eth0&quot; to &quot;ifcfg-eth1&quot; and then changed the IP address line.

References

I found the following sites pretty handy along the way:

* http://pcmcia-cs.sourceforge.net/

    * http://ozlabs.org/people/dgibson/dldwd/<br />
    * http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html<br />
    * http://sourceforge.net/projects/orinoco/47

Of course, things like Alltheweb and Google are pretty handy too ;-)

Finally, if you've got a problem getting your wireless or PCMCIA devices working, have a good look around on the 'net. No one seems to have the full story (I certainly don't!), but you can probably piece the information you need together from various sources.

AttachmentSize
kernel-config.txt23.01 KB