Wifi Solutions
Introduction
All solutions on this Tips and tricks page have been tested on a 2.6.27 Linux kernel patched with the
experimental patch : follow procedure on the
LinuxKernel page.
For simplicity purpose those tests have been led in a basic configuration :
- Rootfs from OpenEmbedded / Angstrom (the one you will find OpenEmbeddedAngstrom page & GettingStarted demos)
- AP : LinkSys WRT54G v2.2
- No encryption (no wep, no WMA)
- short link distance : ~1m
USB Wifi solutions

Note that with OHCI host available currently on at91sam products, you will have an USB full speed connectivity. This range of the USB interface does not allow to reach a full 802.11a/g bandwidth.
ZyDAS: ZD1211B
A "no-name" USB dongle based on ZyDAS chipset ZD1211B has been tested.
ZyDAS was acquired by Atheros, and the ZD1211 is now known as Atheros AR5007UG.
Driver:
You have drivers outside the kernel (although GPL) and inside the kernel starting from 2.6.23.
The zd1211rw with UW2453 RF support mainline Linux kernel is used.
ZD1211 Setup
- firmware found here : http://zd1211.ath.cx/get-firmware
- firmware files (zd1211*) have to be copied in
/lib/firmware/zd1211/ directory on the target
- 2.6.27-exp kernel configuration. Here is the added entries in kernel configuration :
CONFIG_CFG80211=y
CONFIG_NL80211=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_MAC80211=y
CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_DEFAULT_PID=y
CONFIG_MAC80211_RC_DEFAULT="pid"
CONFIG_WLAN_80211=y
CONFIG_ZD1211RW=m
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_HW=y
- reboot with the newly generated kernel
-
insmod zd1211rw.ko
- insert your usb dongle
-
iwconfig wlan0 essid <YOURSSID>
-
ifconfig wlan0 <YOURIPADDR>
ZD1211 usage log
usbcore: registered new interface driver zd1211rw
usb 1-1: new full speed USB device using at91_ohci and address 2
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: reset full speed USB device using at91_ohci and address 2
phy0: Selected rate control algorithm 'pid'
zd1211rw 1-1:1.0: phy0
firmware: requesting zd1211/zd1211b_ub
firmware: requesting zd1211/zd1211b_uphr
zd1211rw 1-1:1.0: firmware version 4725
zd1211rw 1-1:1.0: zd1211b chip 0ace:1215 v4810 full 00-17-31 UW2453_RF pa0 g7---
wlan0: authenticate with AP 00:13:10:8b:0a:d3
wlan0: authenticated
wlan0: associate with AP 00:13:10:8b:0a:d3
wlan0: RX AssocResp from 00:13:10:8b:0a:d3 (capab=0x401 status=0 aid=1)
wlan0: associated
[..]
ZD1211 Performance measurement
- tests on at91sam9263ek/2.6.27-exp
Iperf
# TCP:
SAM9 : iperf -s -i2
Linux PC : iperf -c 192.168.1.10
Result : 0.0-10.0 sec 5.22 MBytes 4.38 Mbits/sec
SAM9 : iperf -c 192.168.1.20
Linux PC : iperf -s -i2
Result : 0.0-10.0 sec 7.17 MBytes 6.00 Mbits/sec
Ralink: RT73
A Belkin USB dongle based on Ralink chipset RT73 (Belkin F5D7050 Ver 3) has been tested.
Driver:
You have drivers outside the kernel (although GPL) and inside the kernel starting from 2.6.24.
The mainline linux rt73.ko driver is used.
RT73 Setup
- firmware found here : Ralink Linux support page and take the RT2571 firmware
- firmware file rt73.bin have to be copied in
/lib/firmware/ directory on the target
- 2.6.27-exp kernel configuration. Here is the added entries in kernel configuration :
CONFIG_CFG80211=y
CONFIG_NL80211=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_MAC80211=y
CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_DEFAULT_PID=y
CONFIG_MAC80211_RC_DEFAULT="pid"
CONFIG_WLAN_80211=y
CONFIG_RT2X00=m
CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT73USB=m
CONFIG_RT73USB_LEDS=y
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_HW=y
CONFIG_CRC_ITU_T=y
- reboot with the newly generated kernel
-
insmod rt2x00lib.ko, insmod rt2x00usb.ko, insmod rt73usb.ko
- insert your usb dongle
-
iwconfig wlan0 essid <YOURSSID>
-
ifconfig wlan0 <YOURIPADDR>
RT73 usage log
Registered led device: rt73usb-phy0:radio
Registered led device: rt73usb-phy0:assoc
Registered led device: rt73usb-phy0:quality
usbcore: registered new interface driver rt73usb
firmware: requesting rt73.bin
RT73 Performance measurement
- tests on at91sam9263ek/2.6.27-exp
Iperf
# TCP:
SAM9 : iperf -s
Linux PC : iperf -c 192.168.1.10
Result : 0.0-10.1 sec 8.98 MBytes 7.49 Mbits/sec
SAM9 : iperf -c 192.168.1.20
Linux PC : iperf -s
Result : 0.0-10.0 sec 7.02 MBytes 5.89 Mbits/sec
SDIO Wifi solutions
Marvell 88w8686
An evaluation SDIO card has been used :
http://www.embeddedworks.net/wlan/oem_sdio_80211g.html
The
libertas sdio driver is included in mainline Linux kernel from 2.6.24.
88w8686 Setup
- Ask the firmware from your hardware provider. Firmware revision
fw 8.73.7p3 has been tested
- firmware files helper_sd.bin and sd8686.bin have to be copied in
/lib/firmware/ directory on the target
- 2.6.27-exp kernel configuration. Here is the added entries in kernel configuration :
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_NETDEVICES=y
CONFIG_WLAN_80211=y
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_SDIO=m
- insert your SDIO card
- reboot with the newly generated kernel
- sdio card is recognized during bootup with the following line or equivalent:
mmc0: new SDIO card at address 0001
- load kernel modules running
insmod libertas.ko and insmod libertas_sdio.ko (
specify also fw name if needed : insmod libertas_sdio.ko helper_name="helper_sd.bin")
-
iwconfig eth0 essid <YOURSSID> (can be eth1 depending on your configuration)
-
ifconfig eth0 <YOURIPADDR> (can be eth1 depending on your configuration)
88w8686 usage log
libertas_sdio: Libertas SDIO driver
libertas_sdio: Copyright Pierre Ossman
firmware: requesting helper_sd.bin
firmware: requesting sd8686.bin
libertas: 00:1a:6b:93:33:27, fw 8.73.7p3, cap 0x00000303
libertas: PREP_CMD: command 0x00a3 failed: 2
libertas: PREP_CMD: command 0x00a3 failed: 2
libertas: eth0: Marvell WLAN 802.11 adapter
88w8686 Performance measurement
- tests on at91sam9rlek/2.6.27-exp
Iperf
# TCP:
SAM9 : iperf -s -i2
Linux PC : iperf -c 192.168.1.10
Result : 0.0-10.1 sec 9.73 MBytes 8.10 Mbits/sec
SAM9 : iperf -c 192.168.1.20
Linux PC : iperf -s -i2
Result : 0.0-10.0 sec 9.55 MBytes 8.01 Mbits/sec
- bigger TCP window size...
# TCP:
SAM9 : iperf -s -w10M
Linux PC : iperf -c 192.168.1.20 -t 120 -w10M
Result : 0.0-120.1 sec 121 MBytes 8.43 Mbits/sec
SAM9 : iperf -c 192.168.1.10 -t 120 -w10M
Linux PC : iperf -s -w10M
Result : 0.0-120.0 sec 118 MBytes 8.27 Mbits/sec