Prism II Access Point Mini-Howto
(aka "The $40 802.11 Access Point")
by Robert Rose
rose at@-- cafwap dot net
Last Updated 1/14/2002
How to configure "PRISMII" chipset PCMCIA cards
as IEEE 802.11b compliant Access Points
DISCLAIMER: Like everything else on the net, I, the author,
take absolutely no responsibility for the repercussions
or use of this document. USE ENTIRELY AT YOUR OWN RISK.
0.1 Mental mindset
Setting up an 802.11b access point using PRISMII based cards isn't
a simple process.. It's a painful process that requires some
blood, sweat, tears, and determination to get it working.
If you're not comfortable editing Makefiles or configuration files
you probably should not attempt setting up an access point on linux.
Save yourself the frustration and go out and buy a cheap hardware
access point. :-)
Actually, setting up an access point might not be so difficult by the
time you read this. At the time of this writing, the latest version
of the PRISMII drivers for linux was 0.1.8, and very few people on
the mailing lists had announced they had successfully set up an
access point, and no one had yet documented the process. Maybe by
the time I finish writing this the process will be much simpler! :-)
0.2 A PRISMII card (duh)
You will need a PRISMII PCMCIA 802.11b network card first of all, or this
HOWTO won't be of much use to you, unless you're into that sorta 'thang.
PRISMII is a 802.11b chipset manufactured by Intersil, formerly Harris.
It is designed for compact PCMCIA applications under 50mW. Honestly speaking,
the PRISMII chipset is pretty crappy as 802.11b chipsets go-- it is
extremely low power relative to competing cards, and poorly supported. The
lure of the PRISMII chipset is how cheap you can get these cards. Last
time I checked eBay "LeArtery" brand cards (they use the PRISMII set)
were going for around $40 a piece.
PRISMII cards come in many different flavors and vendors. At the time
I'm writing this I am aware of the following manufacturers making
802.11b cards that work on the PRISMII chipset: Addtron, Bromax,
Compaq, D-Link, GemTek, LeArtery, Linksys, SMC, Z-Com, and Zoom.
There will probably be many more in the future.
0.3 A PCMCIA slot
Your linux box will need to have
a properly configured PCMCIA slot. Test it out with some other
PCMCIA card before you start this howto. It would suck to get 3/4 of
the way through this and then find out your PCMCIA slot wasn't
For more information see the PCMCIA HOWTO.
0.4 Kernel sources
At the time of this writing, the only versions of the kernel that worked
with the PRISMII drivers for linux were the 2.2.xx class kernels. This howto was
written using kernel sources 2.2.16 and 2.2.19 running on RedHat Linux.
You will need to get the sources for the version of the kernel that you
are running, *AND* the pcmcia-cs sources for the version of the kernel
that you are running. Normally these are installed in
0.5 Access point firmware
You will need to obtain the PRISMII firmware image, usually a .hex file,
that allows your card to act as an Access Point. This firmware is also
called the 'tertinary' firmware of the PRISMII chipset. Because this file
is the intellectual property of Intersil, it can not be given away
by the manufacturer of your card for legal reasons. You will need to
obtain this firmware directly from Intersil.
At the time of this
writing the latest version of this file was T10003c7.hex.
Do *NOT* email me asking for copies of this file.
0.6 The linux-wlan-ng source
You will need to download the latest version of the linux-wlan source
code. This howto is written for version 0.1.8-pre13.
You will also need to find the latest version of the prism2dl
program that belongs in the linux-wlan tree, but may not be
included in the version that you have downloaded. Apparently
the authors of linux-wlan decided to take it out of the mainstream
distribution due to the implications of what you can do with the
program (e.g., overwrite your firmware with the access point firmware).
For your convience:
1.0 Compile linux-wlan-ng
Please note that newer versions will probably compile differently, please check the README files
after you install the source!
1.1 Get prism2dl
As mentioned earlier, prism2dl hasn't been shipping with the linux-wlan-ng releases,
so you'll need to find it yourself and work it into the source tree. For
linux-wlan-ng version 0.1.8 prism2dl belonged in the directory
Stick prism2dl.c and it's Makefile in that
directory. You will probably also
have to add "download" to the list of directories to compile in the file
DIRS=driver ridlist download
1.2 Enable the access point code
I suppose in an effort to thwart newbies, the linux-wlan people decided to
disable access point support by default. You will need to go into the
Configure file and comment back in the lines for access points:
ask_str "Install drivers as station (sta) or access point (ap)?" WLAN_INSTALL_TYPE
This will allow you to choose "ap" (access point) when prompted.
1.3 Run Configure
Type ./Configure in the main linux-wlan-ng directory and answer
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 33# ./Configure
-------------- Linux WLAN Configuration Script -------------
The default responses are correct for most users.
Linux source directory [/usr/src/linux]:
The kernel source tree is version 2.2.19-7.0.1.
The current kernel build date is Tue Apr 10 00:55:03 2001.
pcmcia-cs source dir
Alternate target install root directory on host :
Module install directory [/lib/modules/2.2.19-7.0.1]:
PCMCIA script directory [/etc/pcmcia]:
It looks like you have a System V init file setup.
Install drivers as station (sta) or access point (ap)? [ap]:
Target Architecture? (i386, ppc, or alpha) [i386]:
Prefix for build host compiler? (rarely needed) :
Compiling with a cross compiler? (y/n) [n]:
Build for debugging (see doc/config.debug) (y/n) [n]:
Build for Kernel PCMCIA? (y/n) [n]:
Build PLX???? based PCI (_plx) adapter drivers? (y/n) [n]:
Build PCMCIA Card Services (_cs) drivers? (y/n) [y]:
1.4 Compile and install
It sounds simple enough :-)
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 34# make all
acabar:/private/wireless/linux-wlan-ng-0.1.8-pre13 35# make install
2.1 Configure linux-wlan-ng, restart pcmcia services
Add your card to /etc/pcmcia/wlan-ng.conf if it's not already in
there. If you don't know how to do this refer to the PCMCIA
howto. Here's an example for my LeArtery card:
card "LeArtery SYNCBYAIR 11Mbps Wireless LAN PC Card Version 01.02"
manfid 0x0156, 0x0002
You also need to enable access pointing and diable User MIBS
in the wlan-ng.opts file:
Now run /etc/init.d/pcmcia restart to restart card services.
Your card will *NOT* work at this moment, and you'll hear
some dissapointing beeps coming out of your computer. If you go into
/var/log/messages you'll see why:
Jul 10 20:27:08 acabar cardmgr: initializing socket 0
Jul 10 20:27:08 acabar cardmgr: socket 0: LeArtery SYNCBYAIR 11Mbps Wireless LAN PC Card Version 01.02
Jul 10 20:27:08 acabar cardmgr: executing: 'modprobe prism2_cs prism2_debug=5'
Jul 10 20:27:08 acabar kernel: init_module: prism2_cs.o: 0.1.8-pre12 Loaded
Jul 10 20:27:08 acabar kernel: init_module: dev_info is: prism2_cs
Jul 10 20:27:08 acabar kernel: prism2_cs: index 0x01: Vcc 5.0, irq 3, io 0x0100-0x013f
Jul 10 20:27:08 acabar cardmgr: executing: './wlan-ng start wlan0'
Jul 10 20:27:09 acabar cardmgr: + AP not started, resultcode=not_supported
Notice it says on the last line that your card does not support AP. This is
because your firmware has not been properly configured yet, so your card
rejects going into access point mode. We'll fix that next...
2.2 Make a pda file
Before you can load the access point firmware, you need to construct a pda file. The pda file is
used to set run-time
variables on your PRISMII card. Your card will most likely need a number of
it's parameters changed in order for it to allow you to enable access pointing.
The first step is to ouput your card's current pda configuration by using
prism2dl. Your's will be slightly different but mostly the same
acabar:/sbin 86# prism2dl -s -g wlan0
0x0006, 0x0006, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001,
0x0004, 0x0101, 0x9000, 0x07d1, 0x5132,
0x0007, 0x0103, 0x0002, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000,
0x0002, 0x0104, 0x07ff,
0x0002, 0x0105, 0x0003,
0x0002, 0x0107, 0x0001,
[...more hex values follow...]
This may look like garbage but you'll need to learn to read it to construct
a pda file for your card. The first value on a line specifies the length of the
data that is to follow on the line. The second value specifies the "id number"
of the parameter for the line, and the data that follows is the value of the
parameter. Here are a few of the interesting ones and what they mean:
Now here's the tricky part.. You'll need to take my pda file, available
here and modify it so that the values for
ID 0x0001, ID 0x0006, ID 0x0101, 0x0103, 0x0104, 0x0105, and 0x0107 reflect
the values for your card that you got by running prism2dl above.
Leave the rest of the values alone, as they are important for
access point mode. This may
take some experimentation.
- ID 0x0001: PCB Part Number (5-9 byte string)
- ID 0x0006: RF Modem Supplier (4-5 byte string)
- ID 0x0101: MAC address (6 byte string)
- ID 0x0103: Regulatory Domain List
- ID 0x0104: Allowed Channel Set (either 0x07FF for US 1-11 or 0x1fff for ETSI)
To test your pda run prism2dl -v -p your-file. The
will give you some additional useful debugging information.
Important note: If you ever write a bad pda file it will most likely
lock up your card. Don't panic: just eject your card and plug it back
in and it will reset itself.
2.3 Configure linux-wlan-ng (again)
Now that you have a pda file and the ap firmware, you can
setup linux-wlan to automatically load it right before it
loads the access point software.
Open the file /etc/pcmcia/wlan-ng and
add the following line somewhere right after the "===DOWNLOAD===" section:
/sbin/prism2dl -p /private/wireless/leartery.pda -r /private/wireless/T10003c7.hex wlan0
Of course, replace the pda and hex files with the locations for where
you decided to store them on your system.
2.4 The moment of truth
Cross your fingers and restart pcmcia services:
acabar:/etc/pcmcia 46# /etc/init.d/pcmcia restart
Shutting down PCMCIA services: cardmgr modules.
Starting PCMCIA services: modules cardmgr.
If you heard the "bad" pcmcia beep, check your syslog for errors.
If you had a firmware problem at this point (most likely), you'll
need to go back and experiment with your pda file, firmware,
or card configuration.
If the problem is a networking error, we'll fix that in the next
2.5 Configure your network
At this point you should see an interface for 'wlan0' present when you run
acabar:/etc/pcmcia 48# ifconfig
wlan0 Link encap:Ethernet HWaddr 00:90:D1:07:32:51
inet addr:10.0.1.1 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
Interrupt:3 Base address:0x100
If you don't, then something went wrong. Check your syslog.
If you're running RedHat, you'll need to create an ifcfg profile
for the new wlan0 interface. Create a new file in the network-scripts
directory for your wlan0 interface. Here's mine:
acabar:/etc/sysconfig/network-scripts 99# cat ifcfg-wlan0
3.0 Configure your access point
At this point, you should be able to see your access point from other
802.11 systems looking for a hosting network. Next you'll need to
configure your access point further so that it actually forwards IP
traffic, but this is beyond the scope of this howto. From here, go on to
the "regular" Wireless
HOWTO or the