Difference between revisions of "How to setup Marvell 88w8686 SDIO wifi"

From IGEP - ISEE Wiki

Jump to: navigation, search
 
(14 intermediate revisions by 5 users not shown)
Line 12: Line 12:
  
 
*libertas: Marvell Libertas 8385/8686/8688 SDIO 802.11b/g card  
 
*libertas: Marvell Libertas 8385/8686/8688 SDIO 802.11b/g card  
*firmware: 9.70.3p24 ( download from http://extranet.marvell.com/drivers/driverDisplay.do?driverId=203 )
+
*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.  
 
SDIO card should be showed after the image is downloaded to the board.  
 
<pre>mmc1: new SDIO card at address 0001
 
<pre>mmc1: new SDIO card at address 0001
 
</pre>  
 
</pre>  
The firmware binaries sd8686_helper.bin and sd8686.bin should be in /lib/firmware directory.
 
  
NOTE: It appears that the helper file is named differently in newer versions of the firmware (helper_sd.bin).  I renamed it to "sd8686_helper.bin".  Also, the following command assumes that you have compiled the libertas driver as a module.  If you use the "igep0020_defconfig" during kernel compilation, you will want to menuconfig and make libertas a module instead of a built in kernel.
+
To make the SDIO WIFI module work load the libertas_sdio module (assuming you built it as module)
 
 
To make the SDIO WIFI module work load the libertas_sdio module  
 
 
<pre># modprobe libertas_sdio
 
<pre># modprobe libertas_sdio
  
Line 254: Line 252:
 
Then modify /etc/network/interfaces  
 
Then modify /etc/network/interfaces  
  
Change the line
+
Add the next lines (replace wlan0 by your wifi interface):  
<pre>auto eth0
+
<pre>auto wlan0
into
+
iface wlan0 inet dhcp
#auto eth0</pre>
 
 
 
Add the next lines (replace eth2 by your wifi interface):  
 
<pre>iface eth2 inet dhcp
 
 
wpa-conf /etc/wpa_supplicant.conf</pre>
 
wpa-conf /etc/wpa_supplicant.conf</pre>
  
 
To check if your /etc/wpa_supplicant.conf file is correct you can type  
 
To check if your /etc/wpa_supplicant.conf file is correct you can type  
  
<pre>wpa_supplicant -ieth2 -c/etc/wpa_supplicant.conf -d</pre>
+
<pre>wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d</pre>
  
=== Comments  ===
+
= See also =
For kernel 2.6.35.8 and above you will see wlan0 instead of eth1.
+
*[[How to setup Marvell bluetooth]]
Wifi for kernel 2.6.35.7 seems to be broken, please use 2.6.35.8 or above.
+
*[[Using IGEP WLAN to communicate]]
  
[[Category:How_to_forge|Wireless]]
+
[[Category:Wifi]]

Latest revision as of 16:40, 16 July 2014

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

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:

  1. create file /etc/wpa_supplicant.conf
  2. 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

See also