Linux
2 October 2011 4 Comments

Fixing Ralink 3090 Wireless Problems on Linux

Introduction

If you have a Ralink 3090 (RT3090) wireless network card, you can run into problems when running Linux. These problems manifest themselves as a connection that is unreliable and slow, or even completely broken.

The Linux kernel decides which modules (drivers) should be loaded for your hardware setup, but it can get it wrong. If you are having lots of wireless networking problems, you probably don’t have the correct modules loaded. The included-by-default kernel module that seems to give the best results with the RT3090 is called rt2860sta. If you are running Ubuntu, you can try the rt3090-dkms package, which might give better results than the rt2860sta module.

UPDATE:
With the new Ubuntu version 12.04 the Ralink 3090 seems to work flawlessly out of the box!

List Modules

To see your currently loaded kernel modules:

$ lsmod | less

Using the rt3090-dkms Module

If you are running Ubuntu, this module might give better results than rt2860. In my case Ubuntu would no longer shut down, but there are many positive stories about the module too.

First, install the package from the Markus Heberling’s personal package archive.

$ sudo add-apt-repository ppa:markus-tisoft/rt3090
$ sudo apt-get update
$ sudo apt-get install dkms rt3090-dkms

Now you should blacklist the other RT modules. Edit the module blacklist:

$ sudo nano /etc/modprobe.d/blacklist.conf

And add these lines:

blacklist rt2800pci
blacklist rt2800usb
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb
blacklist rt2860sta

Save and close the file. Now reboot your system and start using the new module.

Using the rt2860sta Module

The rt2860 module is included in the 2.6.39 kernel. Enabling it should improve network performance to a use-able level. If you are not able to use the rt3090-dkms package, this is your best option.

Blacklist Bad Modules

If you see both rt2860sta and some other rt module such as rt2800pci or rt2x00pci listed in the left column, then you should blacklist everything but rt2860.

$ sudo nano /etc/modprobe.d/blacklist.conf

And add these lines:

blacklist rt2800pci
blacklist rt2800usb
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb

Save and close the file. Now these modules will no longer be loaded automatically.

Load rt2860sta On Boot

If you do not see rt2860sta in the lsmod output after a reboot, you should configure your system to automatically load it (after blacklisting the other modules).

To have a module automatically loaded at boot time, open the /etc/modules file in a text editor:

$ sudo nano /etc/modules

And add this line:

rt2860sta

Then save and close the file. The rt2860 module will be loaded at boot time. Reboot your system, and hopefully your wireless connection should have improved.

Compiling the driver yourself

If all else fails, you can compile the driver yourself.

This page should get you on your way: . You don’t have to do most of these steps (I just downloaded the drivers and executed ‘make’ without doing any patches on Ubuntu 11.04).

Unfortunately, the latest Ralink driver for RT3090 of this moment (2.4.0.4) will not compile if your kernel is newer than 2.6.35. It relies on an enum that is defined in the linux headers: tx_power_setting. The problem is in the file

os/linux/cfg80211.c

Since the function TxPwrSet function does not do anything, you can just copy over the enum definition as a workaround. Your module should then compile.

Add these lines to os/linux/cfg80211.c.

enum tx_power_setting {
        TX_POWER_AUTOMATIC,
        TX_POWER_LIMITED,
        TX_POWER_FIXED,
};

Now execute make and make install, then blacklist rt2860sta and reboot.

Other Information

You can load and unload modules while your system is running using the modprobe command. For example, to unload rt2800pci:

$ sudo modprobe -rf rt2800pci

And to load rt2860sta:

$ sudo modprobe rt2860sta

Of course, these changes will be reverted when you reboot your system.

Resources

4 Responses to “Fixing Ralink 3090 Wireless Problems on Linux”

  1. Collins 7 January 2012 at 3:11 am #

    After editing the ‘/etc/modprobe.d/blacklist.conf’, I simply I simply did

    sudo modprobe rt2800pci

    pressed the wifi key on my Compaq CQ62 and the wifi light changed from orange to white.

  2. Thierry 29 January 2012 at 3:33 am #

    Hello everyone,
    I am facing an issue with the above.
    I blacklisted all rt2800 and rebooted my computer. I then installed rt3090-dkms, here is the result :
    *****************************************************************************
    (Reading database … 208867 files and directories currently installed.)
    Preparing to replace rt3090-dkms 1:2.4.0.4-0ubuntu0~ppa0 (using …/rt3090-dkms_2.4.0.4-0ubuntu0~ppa0_all.deb) …
    Removing all DKMS Modules
    Done.
    Unpacking replacement rt3090-dkms …
    Setting up rt3090-dkms (1:2.4.0.4-0ubuntu0~ppa0) …
    Adding Module to DKMS build system
    Doing initial module build
    Installing initial module
    Done.
    Done
    *****************************************************************************

    But the it looks like the module is not installed :

    *****************************************************************************
    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ sudo modprobe rt3090sta
    [sudo] password for thierryk:
    FATAL: Module rt3090sta not found.
    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ sudo modprobe rt3090
    FATAL: Module rt3090 not found.
    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ sudo modprobe rt3090-dkms
    FATAL: Module rt3090_dkms not found.

    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ lspci -k|grep -i network –after-context 3
    43:00.0 Network controller: Ralink corp. RT3090 Wireless 802.11n 1T/1R PCIe
    Subsystem: Hewlett-Packard Company Device 1453
    Kernel modules: rt2800pci
    44:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
    *****************************************************************************

    If I load the rt2800, it works (see the last line) :
    *****************************************************************************
    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ sudo modprobe rt2800pci
    thierryk@thierry-HP-ProBook-4320s:/etc/modprobe.d$ lspci -k|grep -i network –after-context 3
    43:00.0 Network controller: Ralink corp. RT3090 Wireless 802.11n 1T/1R PCIe
    Subsystem: Hewlett-Packard Company Device 1453
    Kernel driver in use: rt2800pci
    Kernel modules: rt2800pci

    *****************************************************************************

    Any idea to help me out please ?
    Thanks in advance. Thierry

  3. sgunfio 26 March 2012 at 12:01 pm #

    you need to replace this function in os/linux/cfg80211.c
    in order to compile source in newer kernel

    ieee80211_channel_to_frequency(notif_bss_info->channel
    #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
    ,(notif_bss_info->channel <= CH_MAX_2G_CHANNEL) ? IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ
    #endif
    );

  4. Dmitriy Korotayev 1 July 2012 at 8:25 pm #

    Came here just to say thank you. Loading module on boot fixed my problems (after installing rt3090-dkms)