46 Answers
46

This answer is based on an extensive research done by various Ubuntu users that worked together in almost all issues related to Broadcom. Special thanks to chili555 who helped in the Ubuntu forums and on this site with many questions related to Wireless devices and to others who have contributed through E-Mail, chats, IRC and more in testing various drivers with several of the most popular Broadcom Wireless cards (Huge Thanks to Chili555 really. This guy knows his stuff).

In total we wanted to offer an answer that could be easy to follow and covered most Broadcom Cards / Drivers. After you follow this guide, you will NEED to test your wireless connection for at least 2 hours (I actually recommend 8 hours) with another device in either Ad-Hoc Mode, Infrastructure Mode or Both. Common problems that will be solved (Apart from drivers not installing) are:

So with that in mind, the following is what we have right now which is simplified in just 3 steps:

1. Knowing what Broadcom Wireless Card you have

There are dozens of Broadcom wireless cards and more seem to appear every day. The key to finding the correct driver for any network card is what is known as the PCI ID (PCI.ID). To find out which PCI.ID you have, we proceed to opening the terminal by pressing CTRL+ALT+T (It should open a window with a blank background) and inside this terminal we run the following command:

lspci -nn -d 14e4:

You will get something like the following if you have a Broadcom Wireless Adapter (The ID 14e4 used in the example above in most cases is a Broadcom Wireless Card):

The PCI.ID in this example is 14e4:4320 as seen inside the Brackets [...]. In some cases you will also need the revision version (if it appears) for some special cases. In this case, the revision version is rev 03 as shown inside the Parentheses (...) at the end. So what you will need after this search is:

[14e4:4320] (rev 03)

With this new information you can look in the table below and select the appropriate method to install your driver. For example, In this case, since you have the 14e4:4320 rev 03, if we go down the list to the one that shows the exact same PCI.ID you will see that in the columns for Ubuntu 12.04, 13.10 or 14.04 it shows the linux-firmware-nonfree package driver. This means that you will only have to install this particular package since it appears in all Ubuntu version columns.

NOTE - Before proceeding, if you have previously installed any drivers, have blacklisted or uncommented any driver files or configuration files or have done any changes whatsoever to the system to make the drivers work in previous attempts, you will need to undo them in order to follow this guide. We assume you are doing this from scratch and have not changed any configuration files, modules or drivers in the system in any way (apart from updating the system). This includes any installations using apt-get, aptitude, synaptic, dpkg, software center or manual compilation and installation of the packages. The system has to start from scratch in order for this to work and to avoid any conflicts that may appear if earlier work was done.

For example, if you have previously installed the bcmwl-kernel-source package, you will need to remove it by using the purge method:

sudo apt-get purge bcmwl-kernel-source

2. Preparing the System

If you have just installed Ubuntu, you will need to build an index of available packages before we can install your driver if you have not done so already:

sudo apt-get update

I would even go so further as to update the Ubuntu list of PCI.IDs:

sudo update-pciids

Just in case the ID of a particular new Broadcom Device you are using has just appeared.

Now using the PCI.ID you found in the steps above, we then search in the list below to find the matching PCI.ID and the method to install the driver associated with it in a simple and correct way. The terminal will be used to avoid any GUI related issues. This applies with all cases, except as noted. The installation procedure is done only via terminal and also while connected to the internet with a temporary wired ethernet connection or USB modem or any means possible that can give your PC, for the time, Internet access. After you find in the list below the correct package we then proceed with the installation.

3. Installing the Package

Assuming you used the PCI.ID 14e4:4320 rev 03 as found in your search above, and then looked at the table below and found that the correct package to install is the linux-firmware-nonfree, we then proceed to simply install this package in the terminal:

Special Case #1 - Uses bcma and brcmsmac driver combination. Required firmware is installed by default in the package linux-firmware.

Special Case #2 - Probably only working in 64-bit only for versions older than 14.04. Some cases need to install the linux-firmware-nonfree and bcmwl-kernel-source packages, then proceed to reboot.

Special Case #3 - Use brcmwl-kernel-source for kernel versions less than 3.8. To check for Kernel version open the terminal and type: uname -r. For kernel versions 3.8 and later, use brcmsmac.

Special Case #4 - In hardware like the Lenovo S10-2, if your wireless card gets stuck trying to connect to an SSID (keeps trying to connect), then the alternative to get it working would be to install the brcmwl-kernel-source package (Remove any other installed packages related to it). Read the Debugging section below for more information regarding this wireless device.

IMPORTANT NOTE - After September 2014, if you follow this answer and still you have problems installing the correct driver, please try the firmware-b43-installer package. There were some changes and some drivers will only work with this package. Remember to have a clean system before installing it:

sudo apt-get install firmware-b43-installer

In some particular cases, after installing the firmware-b43-installer you need to remove the b43 module, enable it again and even proceed to unblock with rfkill:

sudo modprobe -r b43
sudo modprobe b43
sudo rfkill unblock all

If you have a Broadcom card that has a different pci.id, please ask a new question. Once solved, the solution will be added to this howto.

DEBUGGING

The following information is additional material to read about solving various issues related to Wireless Management and conflicts with other Network devices. Know that it some cases you need to have an updated Kernel version, since each new version of the Kernel introduces either new Network drivers, improvements over existing drivers or solves bugs regarding them.

If your connection drops every so often some users have suggested to set IPv6 to Ignore. Just go to Network Manager (The network icon on the top panel). Click on it then select Edit Settings. Then go to the Wireless connection you are using, select it. Now go to the last Tab in there that mentions IPv6 Settings. In the Method field select Ignore.

If your laptop does not detect your wireless card some users have mentioned that using rfkill unblock all will solve the problem. Others simply turned the WiFi switch on their laptops off and then on again (Physical switch available on this laptops). For more information about rfkill please read rf kill unblock all DOES NOT WORK!

If it works then add it to you RC files so it is executed every time you boot. You can change PIO to 1 if you need to it.

If your wireless card see/not see the router and gets stuck in an endless "Trying to connect (Try 1/3)" loop the solution might be proper configuration of your router or wireless SSID device.

For all Wireless cards in general, it is very important to also take into consideration the network devices you are using (Routers, Switches, Wireless Channels and Wireless Bands, etc..). With this information you will be able to evaluate better what the source of the problem could be when you arrive at a dead end. An example would be the Lenovo S10-2 which uses the 14e4:4315 rev 01 PCIID. Even after installing the correct driver the user would end up in a "trying to connect" loop. It would see the wireless SSID but when trying to connect to it, it would enter an reconnecting loop.

The solution was that this particular wireless device did not support 40 Mhz channels nor does it support 802.11N. The router in that case was actually broadcasting with a forced 40 Mhz and on WiFi-N only. When the router was set to Auto mode and 20/40 Mhz Channel, the wireless card worked correctly. This is a case scenario that also repeats in other cases, so a proper evaluation of the network equipment would help a lot.

b43-fwcutter. Lots of people see "Broadcom" and jump on this but it's not compatible with the 4313 (which is newer). If you've installed it, purge it.

ndiswrapper. Even more flaky than the STA driver. I managed to get it working for about 10 minutes before everything imploded.

brcm80211 aka brcmsmac. This is a (relatively) new driver that was recently added to Ubuntu (since the driver was added to the kernel). This should work well and (in recent version of Ubuntu, Natty and Oneiric) should "Just work". This is the droid you're looking for. Use this driver for the 4313.

If you're not running Natty or Oneiric, your kernel probably won't have this driver. You need to be running at least 2.6.27 and I'd recommend 2.6.28 as the bare minimum (you can check what you're on by running uname -r).

If you're behind on versions, I'd suggest the upgrade but for a quick fix, you can take a look at the mainline kernels and try one of those. Installing kernel packages is rarely a risky thing because you can usually just fall back to an old one using the grub boot screen.

You know you're probably on the right driver if you run lsmod | grep brc and you see brcm80211 or brcmsmac in the output.

Blacklisting your way to success

If you're not seeing that, something else has been loaded in and you need to blacklist that. If you can see what has been loaded, great, edit /etc/modprobe.d/blacklist.conf and start adding lines like:

Finally I've solved the problem myself, but I'm not sure how. I was about to compile the driver with the source from broadcom.com and instructions provided in http://www.broadcom.com/docs/linux_sta/README.txt, but at this step of the instructions

I had the same problem with my Acer TravelMate 8172 and its Broadcom 4357 controller on Ubuntu 12.04. I had tried several solutions posted on the web for other Broadcom devices but they didn't work. andybleaden's solution above worked for me.

Following Andy's instructions, first I removed and reinstalled the Broadcom drivers with:

Unfortunately, the wireless card is off whenever I reboot, so I created a script with the above two modprobe commands to execute whenever I reboot. This will have to do until Ubuntu 12.04 is updated with a fix.

The first makes sure that the sta driver is in place, the second and
third blacklist the two drivers brcmsmac and bcma which clash with the
correct sta driver. Copy/paste or make sure your typing is correct!

I have a b43 card and have been using Ubuntu with it since 9.04, I've used the same method to get it working since. It involves some command line usage but believe me it's worth it.

To begin with,if you already have b43-fwcutter installed, you need to reinstall it, please run:

sudo apt-get remove b43-fwcutter

I assume you know the type model of your wireless card. This method does not use the Additionals Drivers way.

After you've uninstalled b43-fwcutter reboot your computer. NB if you've no access to a wired network on your machine you will need to download the b43-fwcutter package manually from here, as well as your card's driver from here. My card is the 4311 so I download the broadcom-wl-4-150-10.5.tar.bz2.

Once you have reinstalled b43-fwcutter either by running sudo apt-get install b43-fwcutter or by using the .deb file you'd have gotten from the quoted website, you need to extract your firmware from the tarball. Run tar -xvjf broadcom-wl-4-150-10.5.tar.bz2 (you may need to change the filename to reflect what you downloaded from the driver site, or just use tar -xvjf broadcom*. Then run cd broadcom-wl-4.150.10.5/driver and finally sudo b43-fwcutter -w /lib/firmware wl_apsta_mimo.o. Now reboot and everything should work fine!

Sometimes, the Additional Drivers Utility will fail to install the Broadcom STA Wireless Driver. When that happens, first check if your card is indeed supported by the STA driver, and to do that, open a terminal window (ctrl-alt-t) and run

lspci -nn | grep -i BCM

The output will include the wireless card model, make sure it is among the models listed below.

As I've found out, to systemize this a little, there are four driver families available:

open-source b43 from the the [b43m project][1] that is available in [Linux kernel][2],

open-source brcmsmac/brcmfmac, also availalble in [kernel][3]

Windows libs via [ndiswrapper][4], and

[Broadcom][5]'s own linux [libs (STA)][6]

These links also provide reference to the drivers and lists with chipsets supported.

To be clear with referencing the different IDs, make sure to consult the STA link above prior to reading on, and comprare to yours via:

lspci -nn | grep Network | grep "\[....:....\]"

Here's an example for 4313 (from link #6):

BRCM Product Name | PCI Vendor ID | PCI Product ID | Dell Device ID

4313 2.4 Ghz | 0x14e4 | 0x4727 | Dell 1501

Other than the driver, you also need the firmware, firmware-b43-installer.

The description below has been applied to the STA driver but has been written before this.

Although Ubuntu is meant to be versatile, beautiful, and easy to use for everyone, packages still are prone to dependency faults. Look, installing drivers and other system stuff, it's reasonable to get as verbose a feedback as possible, i.e., do this manually or semi-manually (apt-get), avoid those GUI installers.

I've been experiencing the same issues with my 4313. Let me offer a blunt and partly non-analytical solution:

Building for architecture x86_64
Module build for the currently running kernel was skipped since the
kernel source for this kernel does not seem to be installed.

In such case, which I assume happens quite often, since (1) the inherent dependency isn't resolved and (2) there's a break in the wl interface upon upgrades (which may involve a kernel update), in such case, you should simply do the following two steps and I assume you don't need to reinstall the WiFi driver sources:

check you current kernel version as follows (third entry):

uname -r

install the appropriate linux-headers, which in my case is:

sudo apt-get install linux-headers-3.5.0-17-generic

sudo apt-get install linux-headers-generic

After this command you should see (as this has been deferred upon incapacity to compile during the installation procedure of the STA WiFi driver source files):

I'm not sure whether the guys responsible for packages would get to see this. Still, having used Gentoo for years, I've got used to its verbosity and which may seem unnecessary coloring and formatting of output. You guys should add formatting and colors to your apt-get routine, it's so much easier, especially for novice users, to understand what may have gone wrong. And add the headers dependency, you could remove them afterwards--and surely you'd have to rebuild the module upon kernel change.

I hope this helps, and I'm cautious of generalizing the above path to resolve the mass issue. Just give it a try, if it works, awesome, if it doesn't there are so many more solutions offered which are notably more analytical and proficient.

With the STA driver I can search the network, but the connection never finishes.
The system worked fine with Ubuntu 10.10 (Maverick Meerkat) (x86) - now I am using Ubuntu 11.10 (Oneiric Ocelot) beta 2 (x64).

For anyone else who is getting the "wireless is disabled by hardware switch -a" message under wireless (you'll see it by clicking on the icon) - and it's "hard block", that may work in any model (that is working for me in netgear "wireless USB adapter", haven't checked the others, but it may work).

First check if it hard-blocked. Run in terminal (Ctrl + Alt + T):

sudo rfkill list

If it is, first run this to unblock:

sudo rfkill unblock all

Then I shutdown my PC, disconnected it from electricity and opened its left door. I removed the cycled battery and hit the power-button 20 long and short presses to reset the BIOS.

Then I returned the battery and connected the PC to electricity. I turned on the PC and set the BIOS (also for things like no diskette and boot pririty) in the Wake-on-LAN category where it says something on PME to enabled.

I pressed F10 to save settings and restarted. After all this, the system was ready--desktop and its files. I waited for a while and the Wi-Fi was responding again.

That have already worked for me four times (it may happen any time you are forcing a shutdown or disconnecting the Wi-Fi).