Another 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!
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