Marvell's wireless driver not recognized

Solution 1:

Building up on Doug's manual fix to the problem, I was actually able to automate the process pretty easily. I'm writing this for people who are new to this thread so bear with me while I repeat some things that some of you may already know.

First of all, we need to grab the wpa_gui application in order to replace the NetworkManager service.

sudo apt-get install wpagui

Then we need to edit the /etc/network/interfaces file.

sudo gedit /etc/network/interfaces

Replace everything in this file with:

    auto lo
    auto mlan0
    iface lo inet loopback
    iface mlan0 inet manual
            wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp

The "auto mlan0" line is crucial here because it's what starts the wpa_supplicant daemon automatically at startup. Just like Doug's fix, we still set manual configuration to our mlan0 but instead now just point it to the wpa_supplicant.conf configuration. And the final important bit is that we want our internet to automatically acquire the dhcp from the router, so that's what the last line is doing.

We then go into /etc/wpa_supplicant/ to edit the configuration file.

sudo gedit /etc/wpa_supplicant/wpa_supplicant.conf

This configuration file is a big deal because it will contain network passwords. We want to edit this file initially, and then just relegate any future edits to strictly the GUI. To do that, add the following into the file.

    update_config=1
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

Now in the terminal, run the following code to first add your user to the 'netdev' group and then lock this config file down.

sudo adduser YOUR_USER_NAME netdev
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf

The next order of business is to prevent NetworkManager from running on startup.

sudo mv /etc/init/network-manager.conf /etc/init/network-manager.conf-disabled
sudo mv /etc/xdg/autostart/nm-applet.desktop /etc/xdg/autostart/nm-applet.desktop.disabled

Finally, we want WPA_gui to start on boot. Since this app doesn't have a service, we just do this from Ubuntu's own Startup Applications tool. Just search for it in Dash Home, click 'Add', write 'wpa_gui -t' into the command section and call it WPA GUI (or anything you want). The -t option is important because it starts wpa_gui in the tray. Save and restart.

Start the gui tool through the icon. mlan0 should be visible under the Adapter list now. Click on 'Scan', select your network of choice, enter your password and watch it connect automatically. Once you're done changing settings, go to File->Save Configuration to save everything. Your Surface Pro will connect to your WiFi automatically from now on.

Thanks go out to XRunHProf's excellent post on configuring WPA on Debian for this. http://xrunhprof.wordpress.com/2009/09/19/setup-wpa_gui-and-roaming-on-debian/

Solution 2:

I was able to get the driver working with the new firmware that chili555 provided, but had to disable NetworkManager to do it. I entered uap0 and mlan0 in the /etc/network/interfaces file to disable NetworkManager from managing them:

iface mlan0 inet manual
iface uap0 inet manual

Then I restarted, and turned off the network manager service:

service network-manager stop

Then I created an /etc/wpa_supplicant.conf file:

ctrl_interface_group=0
ctrl_interface=/var/run/wpa_supplicant
network={
    scan_ssid=1
    ssid="mySid"
    key_mgmt=WPA-PSK
    psk="passwordGoesWhere?"
}

I ran wpa_supplicant in command line with debug mode to get things working:

/sbin/wpa_supplicant -dd -imlan0 -c/etc/wpa_supplicant.conf -Dwext,nl80211

And once that connected, I ran dhcp to get my IP address:

/sbin/dhclient mlan0

It's not automated, and I'm sure there are other ways to do this better, but it confirmed that my network card works and connects.

Solution 3:

I believe this is attached to a USB bus on the motherboard. Please run:

lsusb

Do you have either 1286:2043 or 1286:2044? If so, it uses the driver mwifiex_usb already in the kernel. However, according to modinfo, it requires firmware not currently included in the linux-firmware package:

$ modinfo mwifiex_usb
filename:       /lib/modules/3.5.0-23-generic/kernel/drivers/net/wireless/mwifiex/mwifiex_usb.ko
firmware:       mrvl/usb8797_uapsta.bin
license:        GPL v2
version:        1.0
<snip>

The firmware package is included in the Raring (13.04) linux-firmware package which I've extracted. You can get it here: https://dl.dropbox.com/u/58267392/mrvl.zip

Drag and drop the package to your desktop. Right-click it and select 'Extract Here.' Now, in a terminal, do:

cd Desktop
sudo cp mrvl/* /lib/firmware/mrvl

Now we unload the driver and reload it so it sees the shiny new firmware:

sudo modprobe -r mwifiex_usb && sudo modprobe mwifiex_usb

Your wireless should now be working.