Niels Horn's Blog

Random thoughts, tips & tricks about Slackware-Linux, Lego and Star Wars

rt3090 wireless adapter with Slackware 13.37

Slackware_buttonAnother simple update… Or not?

This weekend I finally updated my LG X130 netbook to Slackware 13.37. This is one of my “stable” machines that I use all the time for day-to-day tasks, so I do not run -current on it, as I depend on it too much. Slackware-current is very interesting for research and testing all the new stuff, but it can break when you least expect it. And then you need a “stable” installation to at least access the internet, pay the bills, read e-mail, etc. So I left this netbook as one of the last machines to update to Slackware 13.37.

And it went quite smoothly. Except for one thing: the wireless adapter was not working…

Old problem returning?

I remembered that when I first installed Slackware on this netbook about a year ago, I also had a problem with this rt3090 card. The kernel confused it with the rt2800 and tried to load the rt2800pci module – which did not work with this adapter.
At the time, I found a simple solution by ‘Googling”: putting the rt2800pci module on the blacklist by creating a simple text file in /etc/modprobe.d/ with a single line:

blacklist rt2800pci

So I checked if that file was still there, and it was…
I did a “lsmod | grep rt2” and the result was:

rt2860sta             483303  1
crc_ccitt               1087  1 rt2860sta

So the correct module was loaded!

More investigation was needed

ifconfig” did not show the wlan0 interface, but “ifconfig -a” did.
I tried “ifconfig wlan0 up” but it returned with:

SIOCSIFFLAGS: Operation not permitted

So what do we do when a kernel module has problems? Check the dmesg log…
I did a “dmesg | grep -i rt” and found this interesting line:

rt2860 0000:02:00.0: firmware file rt3090.bin request failed (-2)

So, the rt2860 module is looking for the rt3090.bin firmware and not finding it!

But isn’t the rt2860 driver used for the rt3090? I remembered reading (don’t know where, probably when I first installed Slackware 13.1 on this netbook) that the rt3090 adapter was handled 100% by the rt2860 driver.
I decided to check the /lib/firmware directory, where all the firmware files are installed in Slackware. There were several rt2xxx.bin files, but no rt3090.bin.

This is where I decided to get bold

I thought: It’s not working anyway, so what can I loose?
And I created a symlink rt3090.bin to rt2860.bin They are the same in the kernel anyway, right?
I rebooted, and… It worked!

My wireless adapter was working again and my netbook was fully operational as before the update.

But was this really the correct solution?

I decided to go straight to the source and browse around on kernel.org. And in their git repository I found this commit:

rt2860sta: Use latest firmware for RT3090

author Ben Hutchings
Sat, 30 Apr 2011 18:31:32 +0000 (19:31 +0100)
committer Ben Hutchings
Tue, 17 May 2011 04:22:12 +0000 (05:22 +0100)

Ralink’s original drivers for RT2800P/RT2800E-family chips used
multiple different versions of the firmware for different chips. The
rt2860sta driver in staging was briefly converted to load different
files for different chips. However, the current rt2860.bin is
supposed to work on all of them, so replace rt3090.bin with a symlink.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

Well, well! So the official solution was to create a symlink as well! :D
I checked the tree in their git repository and there you can see they have the symlink “rt3090.bin” pointing to the rt2860.bin file, just as I did.
I also noticed a second symlink: rt3070.bin is pointing to rt2870.bin.

Report it back to “The Man”

Now that I was reassured that my solution was the correct one, I sent an e-mail to Pat Volkerding about my findings.
It would be nice to see the rt2860-firmware-26-fw-1 package create the symlink on installation, to prevent some headaches around the world :)

Bookmark and Share

This entry was posted on Monday, August 1st, 2011 at 0:38 and is filed under Slackware, configuration, kernel, networking. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

8 Responses to “rt3090 wireless adapter with Slackware 13.37”

  1. xnote Says:

    i’ve a stupid Q for u sir :)
    1. did you make a new blacklist.conf ..? on /etc/modprobe.d
    2. hwo to make this symlink rt3090.bin to rt2860.bin

    pls help …..

  2. Niels Horn Says:

    Hi,

    I did not create a new blacklist.conf, I just created a new configuration file called rt2800.conf in /etc/modprobe.d.
    Usually these “xxxx.d” directories can contain several files which all are read during configuration, just like /etc/udev/rules.d etc.

    My rt2800.conf file just contains one line:

    blacklist rt2800pci

    The symlink you can create like this (as root):

    # cd /lib/firmware
    # ln -s rt2860.bin rt3090.bin

    That’s it!

  3. xnote Says:

    yeahhhh !!! you’re rock Sir :)
    it’s working :)
    must bookmark this blog :)

  4. Niels Horn Says:

    Glad I could be of help!

  5. RaLink RT3090 di Slackware 13.37 « Denic Wibowo Says:

    [...] tersebut, di kamus besar internet, alias gugel dot kom. Dari hasil pencarian ane dapatkan link ini http://blog.nielshorn.net/2011/08/rt3090-wireless-adapter-with-slackware-13-37/ dan tada… ! masalah solved dengan cara yang tidak pernah ane duga sebelumnya. Mantab [...]

  6. Mark Says:

    Thanks! Helped me to get my wireless working!

  7. Ilya Says:

    Hi. Did your netbook work properly with any encrypted nets? I have Lenovo S10-3c with rt3090. I execute your instructions and get (maybe) nice iwconfig:

    Ralink STA ESSID:”" Nickname:”RT2860STA”
    mode:auto frequency=2.412 GHz Access Point: Not-Associated
    …..

    But i can’t establish connect with my router, which use wpa-personal and offer dhcp. I try to use wpa_supplicant:
    network={
    ssid=”MySSID”
    scan_ssid=0
    proto=WPA
    key_mgmt=WPA-PSK
    pairwise=TKIP
    group=TKIP
    psk=”MyKey”
    }

    And i make some changes in /etc/rc.d/rc.inet1.conf
    IFNAME[4]=”wlan0″
    IPADDR[4]=”"
    NETMASK[4]=”"
    USE_DHCP[4]=”yes”
    WLAN_WPA[4]=”wpa_supplicant”
    WLAN_WPADRIVER[4]=”wext”

    And when i do /etc/rc.d/rc.inet1 restart it hang.
    If i change “wext” to “ralink” or “rt3090.bin” or anything else it says that driver is incorrect.

    I try to use just WEP with iwconfig wlan0 essid “My” key “s:My..”, but i’ve failed again.

    In Debian Squeeze a didn’t have any problems. But i’m interested in Slackware and want to get to know it.
    Thanks.

    (P.S. sorry for my English)

  8. Niels Horn Says:

    Hi,
    Yes, it works flawlessly here!
    Try with wicd, which you can find in the /extra directory of Slackware.
    It’s a little front-end to configure your wireless interface without editing files :)

    Regards,

    Niels

Leave a Reply



XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

It may take some time for your comment to appear, it is not necessary to submit it again.