How to setup Marvell 88w8686 SDIO wifi
From IGEP - ISEE Wiki
Contents
How to setup Marvell 88w8686 SDIO wifi
Overview of How-To
This How-To is meant to be a starting point for people to learn setup the wifi on IGEP v2 devices as quickly and easily as possible.
Feedback and Contributing
At any point, if you see a mistake you can contribute to this How-To.
Setup basics
- libertas: Marvell Libertas 8385/8686/8688 SDIO 802.11b/g card
- firmware: 9.70.3p24 ( download from http://www.marvell.com/support/downloads/search.do ; choose platform Linux 2.6 and download SD-8686-LINUX26-SYSKT-9.70.3.p24-26409.P45-GPL )
This zip archive contains other tarballs ; one of them is named SD-8686-FEDORA26FC6-SYSKT-GPL-9.70.3.p24-26409.P45.tar and contains a FwImage directory. Inside are the two firmware images. You will need to rename helper_sd.bin as sd8686_helper.bin and put both firmware in the lib/firmware (or, as you wish, in lib/firmware/libertas) directory of your target root filesystem.
SDIO card should be showed after the image is downloaded to the board.
mmc1: new SDIO card at address 0001
To make the SDIO WIFI module work load the libertas_sdio module (assuming you built it as module)
# modprobe libertas_sdio libertas_sdio: Libertas SDIO driver libertas_sdio: Copyright Pierre Ossman libertas_sdio mmc1:0001:1: firmware: requesting sd8686_helper.bin libertas_sdio mmc1:0001:1: firmware: requesting sd8686.bin libertas: 00:13:e0:c3:0c:3c, fw 9.70.3p24, cap 0x00000303 libertas: unidentified region code; using the default (USA) libertas: PREP_CMD: command 0x00a3 failed: 2 libertas: PREP_CMD: command 0x00a3 failed: 2 libertas: eth1: Marvell WLAN 802.11 adapter
NOTE: I did not see any of the above output when I modprobe'd libertas_sdio on a 2.6.35-rc6 kernel.
Now you can connect this wifi module to an AP. First of all, you'll check if your devices is detected.
# iwconfig eth1 IEEE 802.11b/g ESSID:"" Mode:Managed Frequency:2.412 GHz Access Point: Not-Associated Bit Rate:0 kb/s Tx-Power=18 dBm Retry short limit:8 RTS thr=2347 B Fragment thr=2346 B Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Next, you will set up the interface
# ifconfig eth1 up eth1 Link encap:Ethernet HWaddr 00:13:E0:C3:0C:3C UP BROADCAST 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 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
and you can scan for an AP
# iwlist eth1 scan Cell 04 - Address: 00:18:84:81:46:E2 ESSID:"MyPlace" Mode:Managed Frequency:2.427 GHz (Channel 4) Quality=100/100 Signal level=-39 dBm Noise level=-96 dBm Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s
Now, is time to associate to your AP
# iwconfig eth1 txpower auto essid MyPlace channel 4 eth1 IEEE 802.11b/g ESSID:"MyPlace" Mode:Managed Frequency:2.427 GHz Access Point: 00:18:84:81:46:E2 Bit Rate:0 kb/s Tx-Power=13 dBm Retry short limit:8 RTS thr=2347 B Fragment thr=2346 B Encryption key:off Power Management:off Link Quality=97/100 Signal level=-43 dBm Noise level=-94 dBm Rx invalid nwid:0 Rx invalid crypt:3109 Rx invalid frag:0 Tx excessive retries:13 Invalid misc:3315 Missed beacon:0
and get and ip address
# udhcpc -i eth1 udhcpc (v1.9.1) started Sending discover... Sending select for 192.168.10.216... Lease of 192.168.10.216 obtained, lease time 43200 adding dns 192.168.10.1
Last, you can test the network interface.
# ping -c 1 192.168.10.1 PING 192.168.10.1 (192.168.10.1): 56 data bytes 64 bytes from 192.168.10.1: seq=0 ttl=64 time=16.327 ms --- 192.168.10.1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 16.327/16.327/16.327 ms
How to debug the libertas driver
From: http://wiki.laptop.org/go/Libertas_Debug
To enable debug on the wireless (libertas) driver you may write to the libertas_debug '/sys' file:
echo LBS_DEBUG_FLAGS > /sys/module/libertas/parameters/libertas_debug
You can calculate the value for LBS_DEBUG_FLAGS using the table bellow (just add up the values for the flags you want to activate).
Debug Flag Name | Flag Hex value | Description(*) |
---|---|---|
LBS_DEB_ENTER | 0x00000001 | function entrance |
LBS_DEB_LEAVE | 0x00000002 | function exit |
LBS_DEB_MAIN | 0x00000004 | main libertas library code |
LBS_DEB_NET | 0x00000008 | interaction with network subsystem |
LBS_DEB_MESH | 0x00000010 | wireless mesh network |
LBS_DEB_WEXT | 0x00000020 | interaction with wireless extensions |
LBS_DEB_IOCTL | 0x00000040 | misc IOCTLs |
LBS_DEB_SCAN | 0x00000080 | scanning for APs |
LBS_DEB_ASSOC | 0x00000100 | associating ton an AP |
LBS_DEB_JOIN | 0x00000200 | joining an IBSS? |
LBS_DEB_11D | 0x00000400 | 802.11d country settings |
LBS_DEB_DEBUGFS | 0x00000800 | interaction with the debugfs subsystem |
LBS_DEB_ETHTOOL | 0x00001000 | interaction with ethtool subsystem |
LBS_DEB_HOST | 0x00002000 | communication between host and wlan chip |
LBS_DEB_CMD | 0x00004000 | command and response processing |
LBS_DEB_RX | 0x00008000 | packet reception |
LBS_DEB_TX | 0x00010000 | packet transmission |
LBS_DEB_USB | 0x00020000 | interaction with USB subsystem |
LBS_DEB_CS | 0x00040000 | interaction with card services subsystem |
LBS_DEB_FW | 0x00080000 | firmware downloading |
LBS_DEB_THREAD | 0x00100000 | main libertas worker thread |
LBS_DEB_HEX | 0x00200000 | turn on detailed hex dumps |
LBS_DEB_SDIO | 0x00400000 | interaction with SDIO subsystem |
(*) Description taken from lbsdebug.c (by Holger Schurig) |
Example:
To activate scanning (LBS_DEB_SCAN), associating (LBS_DEB_ASSOC), command (LBS_DEB_CMD) and host (LBS_DEB_HOST):
echo 0x6180 > /sys/module/libertas/parameters/libertas_debug
The output will be post to the kernel ring buffer. You can display it with the dmesg command:
dmesg
You can also use the lbsdebug tool, from Holger Shurig, git tree available here.
How to get WIFI active upon system start (using a WPA2 access-point)
Tested configuration:
- IGEP v2 board
- Ubuntu Linux provided on the SD-card
- WIFI access point with WPA-PSK encryption method.
Basically you have to create/modify two files:
- create file /etc/wpa_supplicant.conf
- modify /etc/network/interfaces
Here are the details.
To create /etc/wpa_supplicant.conf do:
wpa_passphrase "your SSID" yourPassword > /etc/wpa_supplicant.conf
Now add the following lines at the end of this file:
proto=WPA2 key_mgmt=WPA-PSK pairwise=CCMP
Then modify /etc/network/interfaces
Add the next lines (replace wlan0 by your wifi interface):
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant.conf
To check if your /etc/wpa_supplicant.conf file is correct you can type
wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d