installing BCM43xx module on Ubuntu 18.04 LTS

Published on 29 Dec 2018

Here was the problem. I just bought a new PCIe WiFi adapter for my PC, the TP-Link Archer T6E. After placing the card into my PCIe slot, I turned on my PC and I was not able to even select WiFi network. This happened both on my Win10 OS and Ubuntu 18.04 LTS.

On Win10, the fix was pretty quick. I found the driver on the vendor’s website, installed it, restarted the OS, then it was ready to go. On Ubuntu 18.04 LTS, it was a little bit involved because I didn’t know how to do it in the first place.

A quick trip to the Software & Updates on Ubuntu, specifically the Additional Drivers tab, I saw the option for a proprietary Broadcom driver but I was not able to activate it. A quick check on the internet revealed that in order to activate it, an internet connection is required so that the system can download the driver from the repository.

So, I needed internet to activate a device that could bring me back onto the internet. Neat. I guess the question now is why I had to buy this device. Well, long story short, I thought my previous WiFi card, Gigabyte GC-WB867D-I, was faulty because I had hard time connecting to my WiFi extender. It turned out that the problem was with my WiFi extender, but I bought a new WiFi card instead of a new WiFi extender. Smart.

phase 1: query info & finding package

Okay let’s install the driver (or, in linux’s parlance, kernel module).

The first thing I did was to query the information regarding the currently activated wireless driver with lspci.

lspci -vnn | grep -A 9 Network

lspci -vnn

From here, I learned two things. First was the currently active kernel module, which was the bcma. Even after googling for information, all I learned was that the bcma kernel module was introduced since kernel v3.31 and nothing more than that.

The second piece of information was the chip itself: BCM4360 and 14e4:43a0. These identifiers were the key information that would dictate which driver I should be using to enable the PCIe adapter. After another round of googling and I forgot from where I got this information from, the BCM4360 should use the wl kernel module, which should be available through the bcmwl-kernel-source package.

A quick check with apt-cache revealed this information:

bcmwl apt-cache

Pro-tip. If the apt-cache returned information like I saw above, it means that the Ubuntu package archive actually has that package.

It seemed to me that this was the right target. All I had to do was to actually fetch its .deb package. But, how did I do that without an internet connection? Well, I had a laptop that I could use to download the package.

I went to Ubuntu package archive website and navigated through several folders.

ubuntu > pool > restricted > b > bcmwl

Then I found the package bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu4_amd64.deb, which I believed to be the latest available version.

Up until now, I checked two boxes: querying driver information and finding the driver file on Ubuntu archive website.

phase 2: installation & activation

Everything from here was more straightforward than the previous detective work. After downloading the package, I ran dpkg -i to install it.

sudo dpkg -i bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu4_amd64.deb

Then I went to edit the /etc/modprobe.d/blacklist.conf to comment the line 32, which says blacklist bcm43xx. I was not sure if this step was strictly required, but I did it anyway.

comment the blacklisted module

After that, I rebooted my operating system and when I logged back in, I was able to choose wireless network.

end phase: verification

Before I called it a success, I decided to do a quick verification with the lspci command.

lspci after

The terminal returned Kernel driver in use: wl. All’s good now. All’s good.

I would like to say thank you to a number of threads on Stack Overflow. Too bad, I did not get the chance to bookmark them all for future reference here. They all lost during a system reboot. Noob.