
Fixing Ralink 3090 Wireless Problems on Linux
Contents
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.
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.
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.
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
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
);
Came here just to say thank you. Loading module on boot fixed my problems (after installing rt3090-dkms)