Difference between revisions of "How to setup Marvell 88w8686 SDIO wifi"
From IGEP - ISEE Wiki
(19 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | == How to setup Marvell 88w8686 SDIO wifi == | + | == How to setup Marvell 88w8686 SDIO wifi == |
− | === Overview of How-To === | + | === 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. | |
+ | <pre>mmc1: new SDIO card at address 0001 | ||
+ | </pre> | ||
− | <pre> | + | To make the SDIO WIFI module work load the libertas_sdio module (assuming you built it as module) |
− | # modprobe libertas_sdio | + | <pre># modprobe libertas_sdio |
libertas_sdio: Libertas SDIO driver | libertas_sdio: Libertas SDIO driver | ||
Line 33: | Line 31: | ||
libertas: PREP_CMD: command 0x00a3 failed: 2 | libertas: PREP_CMD: command 0x00a3 failed: 2 | ||
libertas: eth1: Marvell WLAN 802.11 adapter | libertas: eth1: Marvell WLAN 802.11 adapter | ||
− | </pre> | + | </pre> |
− | + | NOTE: I did not see any of the above output when I modprobe'd libertas_sdio on a 2.6.35-rc6 kernel. | |
− | <pre> | + | Now you can connect this wifi module to an AP. First of all, you'll check if your devices is detected. |
− | # iwconfig | + | <pre># iwconfig |
eth1 IEEE 802.11b/g ESSID:"" | eth1 IEEE 802.11b/g ESSID:"" | ||
Line 49: | Line 47: | ||
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 | Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 | ||
Tx excessive retries:0 Invalid misc:0 Missed beacon:0 | Tx excessive retries:0 Invalid misc:0 Missed beacon:0 | ||
− | </pre> | + | </pre> |
− | Next, you will set up the interface | + | Next, you will set up the interface |
− | + | <pre># ifconfig eth1 up | |
− | <pre> | ||
− | # ifconfig eth1 up | ||
eth1 Link encap:Ethernet HWaddr 00:13:E0:C3:0C:3C | eth1 Link encap:Ethernet HWaddr 00:13:E0:C3:0C:3C | ||
Line 61: | Line 57: | ||
collisions:0 txqueuelen:1000 | collisions:0 txqueuelen:1000 | ||
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | ||
− | </pre> | + | </pre> |
− | and you can scan for an AP | + | and you can scan for an AP |
− | + | <pre># iwlist eth1 scan | |
− | <pre> | ||
− | # iwlist eth1 scan | ||
Cell 04 - Address: 00:18:84:81:46:E2 | Cell 04 - Address: 00:18:84:81:46:E2 | ||
Line 76: | Line 70: | ||
11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s | 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s | ||
48 Mb/s; 54 Mb/s | 48 Mb/s; 54 Mb/s | ||
− | </pre> | + | </pre> |
− | Now, is time to associate to your AP | + | Now, is time to associate to your AP |
− | + | <pre># iwconfig eth1 txpower auto essid MyPlace channel 4 | |
− | <pre> | ||
− | # iwconfig eth1 txpower auto essid MyPlace channel 4 | ||
eth1 IEEE 802.11b/g ESSID:"MyPlace" | eth1 IEEE 802.11b/g ESSID:"MyPlace" | ||
Line 91: | Line 83: | ||
Rx invalid nwid:0 Rx invalid crypt:3109 Rx invalid frag:0 | Rx invalid nwid:0 Rx invalid crypt:3109 Rx invalid frag:0 | ||
Tx excessive retries:13 Invalid misc:3315 Missed beacon:0 | Tx excessive retries:13 Invalid misc:3315 Missed beacon:0 | ||
− | </pre> | + | </pre> |
− | and get and ip address | + | and get and ip address |
− | + | <pre># udhcpc -i eth1 | |
− | <pre> | ||
− | # udhcpc -i eth1 | ||
udhcpc (v1.9.1) started | udhcpc (v1.9.1) started | ||
Sending discover... | Sending discover... | ||
Line 101: | Line 91: | ||
Lease of 192.168.10.216 obtained, lease time 43200 | Lease of 192.168.10.216 obtained, lease time 43200 | ||
adding dns 192.168.10.1 | adding dns 192.168.10.1 | ||
− | </pre> | + | </pre> |
− | Last, you can test the network interface. | + | Last, you can test the network interface. |
− | + | <pre># ping -c 1 192.168.10.1 | |
− | <pre> | ||
− | # ping -c 1 192.168.10.1 | ||
PING 192.168.10.1 (192.168.10.1): 56 data bytes | PING 192.168.10.1 (192.168.10.1): 56 data bytes | ||
Line 115: | Line 103: | ||
</pre> | </pre> | ||
− | == How to debug the libertas driver == | + | == 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). | |
− | |||
− | + | {| cellspacing="2" cellpadding="2" border="1" | |
+ | |- | ||
+ | ! 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 | ||
+ | |- | ||
+ | | colspan="3" | (*) Description taken from [http://git.infradead.org/?p=users/schurig/libertas-tools.git;a=blob_plain;f=lbsdebug/lbsdebug.c;hb=master lbsdebug.c] (by Holger Schurig) | ||
+ | |} | ||
− | < | + | <br> Example:<br> 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 | dmesg | ||
− | You can also use the lbsdebug tool, from Holger Shurig, git tree available [http://git.infradead.org/?p=users/schurig/libertas-tools.git;a=blob_plain;f=lbsdebug/lbsdebug.c;hb=master here]. | + | You can also use the lbsdebug tool, from Holger Shurig, git tree available [http://git.infradead.org/?p=users/schurig/libertas-tools.git;a=blob_plain;f=lbsdebug/lbsdebug.c;hb=master 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: | ||
+ | |||
+ | <pre>wpa_passphrase "your SSID" yourPassword > /etc/wpa_supplicant.conf</pre> | ||
+ | |||
+ | Now add the following lines at the end of this file: | ||
+ | |||
+ | <pre>proto=WPA2 | ||
+ | key_mgmt=WPA-PSK | ||
+ | pairwise=CCMP</pre> | ||
+ | |||
+ | Then modify /etc/network/interfaces | ||
+ | |||
+ | Add the next lines (replace wlan0 by your wifi interface): | ||
+ | <pre>auto wlan0 | ||
+ | iface wlan0 inet dhcp | ||
+ | wpa-conf /etc/wpa_supplicant.conf</pre> | ||
+ | |||
+ | To check if your /etc/wpa_supplicant.conf file is correct you can type | ||
+ | <pre>wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d</pre> | ||
+ | = See also = | ||
+ | *[[How to setup Marvell bluetooth]] | ||
+ | *[[Using IGEP WLAN to communicate]] | ||
− | [[Category: | + | [[Category:Wifi]] |
Latest revision as of 16:40, 16 July 2014
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