For me, it was because my computer's Broadcom wi-fi chip was not supported by the included open-source bcma
kernel module driver. No wireless connection appeared when I ran ip link
, so this definitely wasn't a transient error message. I identified the wi-fi chip by running the lspci -k
command (note: might have to use lsusb
if the chip is connected via USB instead of PCI), then finding the line (usually the last) saying:
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4352 802.11ac Wireless Network Adapter (rev 03)
Subsystem: ASUSTeK Computer Inc. Device 855c
Kernel driver in use: bcma
Kernel modules: bcma
The wi-fi chip is a BCM4352, and we're trying to use the bcma
kernel module to interface with it. According to this page on kernel.org, the BCM4352 chip is not supported by the default bcma
kernel module; you have to use the restrictively-licensed broadcom-wl
kernel module instead. The installation process for this driver varies depending on your distro; here were the directions I used for Arch Linux.
Once you install broadcom-wl
you'll have two kernel modules competing to service your wi-fi chip - wl
and bcma
. You can see this by running lspci -k
and seeing:
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4352 802.11ac Wireless Network Adapter (rev 03)
Subsystem: ASUSTeK Computer Inc. Device 855c
Kernel driver in use: wl
Kernel modules: bcma, wl
To prevent conflicts you'll want to blacklist the bcma
kernel module. I did this by following the directions on the Arch Linux wiki here, creating a file at /etc/modprobe.d/nobcma.conf
containing:
# Do not load the 'bcma' module on boot.
blacklist bcma
After rebooting you can run dmesg | grep bcma
to check that it isn't loaded, and dmesg | grep wl
to ensure wl
is loaded (along with some messages about the kernel being tainted by the proprietary code!)
I can now run ip link
and see the wireless link exists:
...
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 54:27:1e:30:26:61 brd ff:ff:ff:ff:ff:ff