The Broadcom Wireless NIC and Linux

I've fought this battle many times and tried NdisWrapper, wifi-radar, wpa_supplicant and the Linux NetworkManger with inconsistent results. Sometimes it works, then it quits again. The methods I've tried are summarized here along with the solution that has worked best - so far. I'm assuming a Fedora, Redhat or Centos distro, things may vary in other distros.

Since your wireless router offers encryption you need to use it but don't use WEP, use WPA2 and create a long pass phrase. Go ahead and make the pass phrase really hard to guess because you will only need to enter it once. After that everything is automated and you should never need to enter it again.

Don't use the Ndiswrapper (webite) protocol even if it might work; there's a better way. I'll get to it below.

Next download the wpa_supplicant package (website) and read the documentation. You won't need to run the wpa_supplicant service (the daemon) but you should go ahead a create a configuration for it. The configuration lives in /etc/wpa_supplicant/wpa_supplicant.conf and looks like this:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=0

network={
ssid="acme"
psk="acme;;is—the=Greatest"
#psk=d590675efe5c0e85fa15f04fae71cea20f399a254b62b93ee13f1c51153497a7
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
group=CCMP TKIP
}

It has all the settings you need to configure the Broadcom wireless NIC.

Another handy wireless utility is wifi-radar (website) that presents a GUI for setting up your NIC but, alas, it doesn't always work. It will modify the /etc/wpa_supplicant/wpa_supplicant.conf file though, so that might save you some hassles.

The NetworkManager utility comes with Linux and kind of works, but it's not really stable from what I've seen. It provides a GUI and it will modify the various wireless configuration files so it's good in that regard but I've had problems with it actually bringing up the wireless NIC.

I set a static IP for the NIC so I can enable servers if I want to. DHCP makes running a server problematic (see here for why you might want a server running: Webserver). I also include the IP of the wireless router as the default gateway and the DNS servers of my ISP. The wireless NIC configuration file is at

/etc/sysconfig/network-scripts/ifcfg-wlan0
(wlan0 is the default name for the first wireless NIC). My ifcfg-wlan0 file looks like this:
DEVICE=wlan0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:1a:76:1e:88:d9
NETMASK=255.255.255.0
DNS1=78.109.9.12
DNS2=78.109.28.12
IPADDR=192.168.2.200
GATEWAY=192.168.2.1
TYPE=Wireless
USERCTL=yes
IPV6INIT=no
PEERDNS=yes
ESSID=acme
CHANNEL=11
MODE=Ad-Hoc
RATE=Auto
DOMAIN=
DHCP_HOSTNAME=
You can edit the file yourself or use NetworkManager. Next you need the right firmware for the Broadcom NIC. I use the b43 driver (website) and the b43-fwcutter utility to extract the right driver. While this isn't difficult to do, you should probably read the web page above to make sure you understand what's happening. You can use rpm or yum to download and install these files but I generally download the tarball so I know where everything is.

The actual b43 driver should end up in /lib/firmware/b43. You can just copy the drivers from the directory they're extracted to. Now edit the /etc/modprobe.conf:

alias wlan0 b43
alias eth0 sky2
alias scsi_hostadapter libata
alias scsi_hostadapter1 pata_atiixp
alias scsi_hostadapter2 usb-storage
alias snd-card-0 snd-hda-intel
options snd-card-0 index=0
options snd-hda-intel index=0
The first line is the Broadcomriver. Now a modprobe b43 should load it (do a lsmod to verify it). Check the /var/log/messages and /var/log/wpa_supplicant.log to check for errors.

After you've installed this software, check to see if wpa_supplicant is enabled:

chkconfig –list|grep wpa

If it's enabled then you'll see that it's “on” in run level 3 and 5. Since we don't need it to actually run type:

chkconfig wpa_supplicant off

We don't need Network Manager either so,

chkconfig NetworkManager off

Now you need to download wicd (website) and install it (or use yum). Get the wicd-client too, it puts an applet on the task bar so you also won't need the NetworkManager nm-applet running. wicd will create a daemon so it will show up as “on” with

chkconfig --list|grep wicd.
The install also creates a startup script in /etc/rc.d/init.d/wicd so you can start, stop and restart it like any other service. Once it's configured and running a ps -ef|grep wicd will show:
root 2341 1 0 Feb08 ? 00:02:24 python -O /usr/lib/wicd/wicd-daemon.py
root 2597 1 0 Feb08 ? 00:00:37 python /usr/lib/wicd/monitor.py
root 2759 1 0 Feb08 ? 00:00:00 wpa_supplicant -B -i wlan0 -c /var/lib/wicd/configurations/00173fa0fd98 -D wext
acme 3116 2997 0 Feb08 ? 00:00:23 python -O /usr/lib/wicd/wicd-client.py
Notice that the wicd utility created its own wpa_supplicant.conf file in /var/lib. It ignores the default wpa_supplicant config file in /etc/wpa_supplicant but it will use the settings it finds there (if they exist and are sane). Notice also that it uses python so make sure it's installed and configured.

It might tbe a good idea to reboot after everything is set up to make sure all daemons start up correctly (use dmesg and /var/log/messages to check). You will have to massage the various config files and options to match your machine, but the information here should be enough to get you started. My own experience is that the wicd package works with very little extra effort, especially if you use yum to download and install everything.

Return to the Contents Page