Go back –> Atheros Linux wireless drivers
Contents
zd1211rw
A large proportion of USB-wireless devices on the consumer market are based on the ZyDAS ZD1211. Several months after the acquisition, Atheros rebranded the chip to AR5007UG.
zd1211rw is a community effort to rewrite ZyDAS's ZD1211 driver. zd1211rw has been included in the kernel since Linux 2.6.18.
On January 11th 2006, a few developers announced a very early version of a rewritten driver, which had been under development for a few days. Soon after doing so, Ulrich Kunitz announced that he had already been working on a rewrite driver for a few weeks. Ulrich's design was clean and was at a further stage in development, so became the base of the future rewrite effort.
On April 5th 2006, we gave a short presentation at the Linux Wireless developers summit. LWN has a report of the summit (photo here)
On April 17th 2006, we announced initial zd1211rw usability on the mailing list.
On July 4th 2006, an early version of zd1211rw was merged into Linus' kernel, just in time for 2.6.18-rc1
On December 2nd 2006, Michael Wu ported zd1211rw to the cutting-edge mac80211 wireless stack for later inclusion in Linux 2.6.25. Also, Daniel and Michael attended the 2nd Linux Wireless Summit.
In May 2007, Atheros rebranded the ZD1211B chip but don't appear to have made other changes. The new chip name is Atheros AR5007UG (alternatively known as AR2524/AR5524). The hardware is supported by the current driver in recent kernel releases.
Subcontent
Supported Devices
zd1211rw supports devices based on the following chipsets:
- ZyDAS ZD1211
- ZyDAS ZD1211B
- Atheros AR5007UG
For a complete listing of supported products, see the device list.
Status
- Usable and stable in managed mode, provided that you are able to run a recent kernel
- The following table indicates the feature set for the in-kernel zd1211rw driver
Feature |
Status |
ZyDAS chips supported |
ZD1211 and ZD1211B (in one kernel module) |
RF types supported (ZD1211) |
AL2230, AL2230S, RF2959, AL7230B, UW2453 |
RF types supported (ZD1211B) |
AL2230, AL2230S, AL7230B, UW2453 |
Support for multiple concurrent devices |
yes |
Connecting to open networks |
working |
Connecting to WEP networks |
working |
Connecting to WPA networks/wpa_supplicant |
working |
Monitor mode |
working |
Mesh mode |
working, see o11s project site |
Master mode |
working |
Ad-hoc mode |
working |
802.11a support |
not yet |
802.11w support |
working |
Largepacket + TX-burst support |
not yet |
Automatic rate selection/management |
yes |
iwconfig parameters supported |
essid, mode, key, channel, ap, rate |
Ability to change MAC address |
yes |
Power management support |
? (probably not yet) |
Automatic TX power calibration |
not yet (fixed TX power currently) |
Complying with local regulations |
yes (channel masks implemented) |
Architectures tested |
x86, PPC32, x86-64, ARM |
ChangeLog
Linux 2.6.39
- Support for master mode
Linux 2.6.26
- Support for open80211s meshing
Linux 2.6.25
- Driver ported to mac80211 wireless stack
- More device IDs and bugfixes
Linux 2.6.24
- More device IDs and bugfixes
Linux 2.6.23
- UW2453 RF support
- Firmware load deferred to interface up time (as opposed to device detection time: you can now build zd1211rw into your kernel image)
- More device IDs added
Linux 2.6.22
- AL7230B/ZD1211B support
- More AL2230S support
- More device IDs added
Linux 2.6.21.5
- AL2230S RF support
Linux 2.6.21
- More device IDs added
Linux 2.6.20
- Multicast/IPv6 support
- More device IDs added
- Advanced ERP handling
- ifconfig now reports packet statistics
- Bug fixes
Linux 2.6.19
- LED support
- Support for driverless devices
- AL7230B RF support
- Many more device IDs added
Linux 2.6.18
- zd1211rw added to mainline kernel
Firmware
Firmware is pulled from userspace, get the files http://sourceforge.net/projects/zd1211/files/
The location the firmware has to be put to varies from distribution to distribution. See dmesg output if loading firmware fails.
Requirements
- A recent Linux kernel with the mac80211 and firmware_class modules (CONFIG_MAC80211, CONFIG_FW_LOADER)
- There is no backwards compatibility with older kernels
- Device firmware (see above)
Performance
- RX performance is about half that of vendor driver, will be improved (probably better now, needs re-measure)
- TX speed should be OK, can be optimized to remove memory allocations in critical path
Debugging
- To enable debugging, enable the CONFIG_ZD1211_DEBUG kernel option
You can keep an eye on softmac's activity by running iwevent in another console while you work.
USB ID's and RF types
We have *not* copied over the list of USB ID's from the ZyDAS driver. We wish to confirm that the RF is supported for each device, and that the device actually works with our driver, before we add the USB ID.
For an explanation of RF types, see this page. We'll add support for more RFs if we see them included in devices available on the market (i.e. if you tell us!).
We currently support most of the IDs listed in the vendor and vendor-based drivers, but not all. You may have to add your own ID before using the driver – there are more detailed instructions available.
Patches
If you wish to contribute, send patches to the linux-wireless mailing list with Daniel and Ulrich on CC (no subscription required). Note there are some bounties available for patches!
Please sign off on your patches, because your patch will probably end up in the kernel source.
Contact
Daniel Drake ( dsd@gentoo.org )
Ulrich Kunitz ( kune@deine-taler.de )
- Please don't mail us with questions directly, use the mailing list.
zd1211-devs mailing list (subscribers only) (web interface)
- We are not affiliated with ZyDAS/Atheros. Do not contact them if you are using this driver.
- We are on IRC: Freenode, #linux-wireless