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.

EDIT: Apparently the rt2860sta module was removed in version 3.0 of the Linux kernel, and replaced by the general-purpose rt2800pci module. I have yet to test the RT3090 with the 3.0 kernel.

To see your currently loaded kernel modules:

$ lsmod | less

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.

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

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.

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.

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

This page should get you on your way: http://www.halibutdepot.org/how_to_build_rt3090_for_ubuntu_lucid/. 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 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.

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.

Fixing Ralink 3090 Wireless Problems on Linux

Leave a Reply

Your email address will not be published. Required fields are marked *