Wifi Solutions
Introduction
H&D Wireless SDIO solution has been tested on 2.6.30 Linux kernel patched with
2.6.30.exp4 experimental patch.
All other solutions on this Tips and tricks page have been tested on a 2.6.27 Linux kernel patched with the
2.6.27 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
SDIO Wifi solutions
H&D Wireless provides support of
SPB104 Wifi SDIO card for Linux4SAM.
H&D Wireless provides binary demos but also source and patches to rebuild from scratch your distribution.
You can find all necessary information
here or you can follow procedure described below.
Pre-built images with WiFi support
The prebuilt image (x.zip) can be applied as described in
GettingStarted#Demo9m10g45ek.
The hdwireless-angstrom-at91sam9m10ekes-wifi.zip file contains image files which includes wifi support.
Adding Wifi support to Angstrom/OpenEmbedded
When building a kernel and a rootfs using Angstrom/OpenEmbedded, the oe_at91sam-owl-wifi.patch should be applied to the oe_at91sam.tgz overlay tree.
Follow the instructions to setup your build environment described in
OpenEmbeddedAngstromBuild#How_to_build_Angstrom_for_AT91 section.
Once the AT91 OpenEmbedded overlay tree installed, download and apply the owl wifi patch on it:
wget http://www.hd-wireless.se/images/stories/public_pdf/oe_at91sam-owl-wifi.patch
cd oe_at91sam
cp /path/to/oe_at91sam-owl-wifi.patch .
patch -p1 < oe_at91sam-owl-wifi.patch
Adding Wifi support to a "custom" kernel
In "standalone" mode, it is assumed that a custom kernel image is built and used according to
LinuxKernel.
During the "Get and patch the Linux kernel", as described in
LinuxKernel, apply the 2.6.30-at91-sdio-irq-support.patch after applying the 2.6.30-at91-exp.4.tar.gz patchset:
wget http://www.hd-wireless.se/images/stories/public_pdf/2.6.30-at91-sdio-irq-support.patch
cd linux-2.6.30
patch -p1 < /path/to/2.6.30-at91-sdio-irq-support.patch
After applying the patch, follow the remaining steps as described in
LinuxKernel to configure, build and install the kernel.
See the owl Linux SDK User Guide documentation (pdf), section 3, for information on how to build and install the owl wifi driver kernel module.
H&D Wireless SPB104 - Performance measurement
# TCP:
SAM9 : iperf -c 192.168.2.100
Linux PC : iperf -s
Result : 0.0-10.0 sec 22.6 MBytes 18.9 Mbits/sec
SAM9 : iperf -s
Linux PC : iperf -c 192.168.2.101
Result : 0.0-10.0 sec 21.3 MBytes 17.9 Mbits/sec
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
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