Just moozing

Before you can check your notes, you must make them…

Broadcom wireless

with one comment

After reinstalling my PC, I boldly announced that it was working fine. I was wrong, the wireless connection starting having issues, and I ended up (temporarily) using the proprietary driver from Broadcom.

Using b43

b43 is the driver that is included with the kernel. It worked with my Broadcom 4312, but while on vacation I started having issues.

It would associate and connect correctly, but after a little while it would disconnect and I would be unable to reconnect. Often a reboot would re-enable to connect to the wireless network for a new brief period.

In the logs I get lines saying b43-phy0 ERROR: PHY transmission error. I found  this mail exchange, and it ends by “We are aware of those errors, but don’t know why they occur, or how to fix them. Sorry.” That does not bode well.

I suspect that It relates to different wireless network using the same channels, but I am unable to recreate such a setting at home, so it is just a theory.

The alternative – the Broadcom STA driver

Broadcom makes their own proprietary driver for Linux. It may be found here.

Since I am using Debian, it turned out to be easy. I followed this guide. He describes three ways of making Broadcom 43xx wireless cards work. The first is about using the b43 module, the third one is downloading the Broadcom driver from their website (from the link above). I opted for the second option of using Debians module-assistant.

Since I am already using my own custom kernel and I am using Debian/testing, I had no need for the backports.

I did (as root)

$ module-assistant prepare
$ apt-get install broadcom-sta-common
$ module-assistant

The last command will present you with an interactive menu to download, build and install the proprietary Broadcom driver.You may also issue module-assistant auto-install broadcom-sta.

This method has the advantage that the driver will be updated automatically when you update packages.

The last part is to blacklist b43 and modprobe the new wl driver.

I got the following error

$ modprobe wl
FATAL: Error inserting wl (/lib/modules/2.6.34.1/kernel/drivers/net/wireless/wl.ko): Invalid module format
FATAL: Error running install command for wl

This error was due to the fact that I apparently had made some changes to the .config file in the kernel built tree, so that it was not in sync with the running kernel. I recompiled the kernel, and redid the module-assistant steps.

Comments on the wl driver

It appears that the wl driver is slower to react to changes, and it takes longer for it to associate and connect. I am using network-manager to handle my wireless connections and the wl driver does not report the state of the hardware switch.

Using the b43 driver, network-manager disables the “Enable wireless” when the hardware kill switch is enabled, but it does know about the state of the switch when using the wl driver.

Going back to b43

Using the wl driver worked well, also on my home network. At work wl driver didn’t work.

network-manager do not find any networks, and issuing (as root) iwconfig eth1 scan fails. Apparently the wireless configuration at work, is configured in a way that breaks the driver. I do not know the reason – it could be anything from special Danish character to non-standard naming or values.

I switched back to b43, and it works fine, which reinforces my belief that it is a driver issue.

Conclusion

I have used three settings

  1. Home network. Only one wireless network available. Both b43 and wl works.
  2. At work. Multiple wireless networks (no channel overlap). wl fails to return proper values from network scan. b43 works.
  3. Vacation network. Lots of independent wireless networks. b43 breaks, but wl works.

To make things worse, using the b43 driver, the wireless is unavailable after hibernation and rmmod/modprobe of b43 does work – only reboot does.

[Update] After working with the hibernation issue, I discovered that it was not related to the b43 module, but instead the rfkill module. I added the line

SUSPEND_MODULES="rfkill"

to /etc/pm/config.d/b43.conf (The location and the .conf extension is the important part). This will unload rfkill on hibernation and reload on wake-up.

Advertisements

Written by moozing

August 30, 2010 at 09:00

Posted in Tech

Tagged with , , ,

One Response

Subscribe to comments with RSS.

  1. […] driver. OpenWrt has support for the open b43 driver in kernel 2.6. I have discussed that in detail elsewhere, but not in an OpenWrt […]

    OpenWrt and WDS « Just moozing

    December 13, 2010 at 11:30


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: