Due to the fact that broadcom use proprietary drivers for their wireless modules it is not usually possible for them to work out of the box with Fedora. This tutorial is aimed at helping you to get the adapter working.
Notes and Pre-requisites #
First I want to mention a couple of points:
- to complete this tutorial you will need an internet connection. I know that sounds a little silly, but there is no other way. You therefore need a temporary wifi adaptor that works in Fedora already, or a hardwired connection
- this process has been tested on Fedora 26, 27 and 28, and I know it to be working for those systems
- the specific wifi adapter I have is BCM4352 (802.11ac Wireless Network Adapter (rev 03)). Although this process should work for all (or most) broadcom adaptors I can't guarantee it
- UEFI secure boot must be disabled in BIOS
Let's get started #
The process itself can be quite simple, but I am aware of some pitfalls that you may come up against in some cases. I know how to get around some of these. With this in mind I will try to highlight potential problems and their fixes as we go through.
The simple way #
You should first make sure you are up to date
sudo dnf update
Then add the rpmfusion repositories
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
Get the broadcom drivers:
sudo dnf install kmod-wl akmods akmod-wl
Check if you have kernel-devel installed. It should be, but if not this will install it for you.
sudo dnf install kernel-devel
Now reboot / restart your system
Once the system has booted and you have logged in again we need to check if the driver "broadcom-wl" has installed. Obviously the the actual driver version might be slightly different to the output below, but you should get a similar response
[testspecimen@localhost ~]$ rpm -qa | grep broadcom-wl
broadcom-wl-6.30.223.271-1.fc22.noarch
Run modprobe
sudo modprobe wl
Check that akmods can be run
[testspecimen@localhost ~]$ sudo akmods
Checking kmods exist for 4.17.19-200.fc28.x86_64 [ OK ]
There is a chance that you will get a warning that "files needed for building modules against kernel could not be found" and "Is the correct kernel devel package installed?". If that is the case don't worry, just continue.
We then need to check that the kernel-devel package in the system is the same as the kernel-devel package installed with the $(uname -r) kernel of your system. First check the system:
[testspecimen@localhost ~]$ ls /usr/src/kernels/
4.17.19-200.fc28.x86_64
then the $(uname -r)
[testspecimen@localhost ~]$ uname -r
4.17.19-200.fc28.x86_64
If they are the same you can skip to the "Load the "wl" module" part just after the system restart in red below, otherwise you need to do the following
You now need to install the correct kernel devel for your system. This is the version that was output when you ran the "uname -r" command. Go to the following website:
You then need to find the correct rpm file for your system for example in my case it would be:
kernel-devel-4.17.19-200.fc28.x86_64.rpm
...and download the file.
Once downloaded (I am assuming you will download the file to the Downloads folder) run the following commands replacing the rpm file name with the correct one for your system that you just downloaded
[testspecimen@localhost ~]$ cd ~/Downloads
[testspecimen@localhost Downloads]$ sudo rpm -Uvh --force kernel-devel-4.17.19-200.fc28.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:kernel-devel-4.17.19-200.fc28 ################################# [50%]
Cleaning up / removing...
2:kernel-devel-4.17.19-200.fc28 ################################# [100%]
Run akmods again
[testspecimen@localhost ~]$ sudo akmods
Checking kmods exist for 4.17.19-200.fc28.x86_64 [ OK ]
Building and installing wl-kmod [ OK ]
Reboot / restart the system
Load the "wl" module
sudo modprobe wl
Check "wl" is loaded
[testspecimen@localhost ~]$ lsmod | grep wl
wl 6463488 0
cfg80211 770048 3 wl,rtlwifi,mac80211
Check that module "wl" is used as a wifi adapter. Please note that the terminal will output a lot of different components like the one below, so you will have to search for the wireless controller specifically.
[testspecimen@localhost ~]$ lspci -v
05:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4352 802.11ac Wireless Network Adapter (rev 03)
Subsystem: ASUSTeK Computer Inc. Device 855c
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at dfa00000 (64-bit, non-prefetchable) [size=32K]
Memory at df800000 (64-bit, non-prefetchable) [size=2M]
Capabilities: <access denied>
Kernel driver in use: wl
Kernel modules: bcma, wl
At this point unplug the temporary wifi card you are using or unplug the hardwired connection you are using. Then we can get a list of networks up
[testspecimen@localhost ~]$ nmcli dev wifi list
IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY
OnePlus5 Infra 11 130 Mbit/s 95 ▂▄▆█ WPA2
COSMOTE-F0CEBB Infra 6 270 Mbit/s 57 ▂▄▆_ WPA1 WPA2
COSMOTE-0EF1CE Infra 11 270 Mbit/s 35 ▂▄__ WPA1 WPA2
conn-x71aa38 Infra 4 135 Mbit/s 34 ▂▄__ WPA1
Then you can connect to the wifi network of your choice
[testspecimen@localhost ~]$ nmcli dev wifi con "your_ssid" password "your_ssid_password"
That should be it!
Let me know if it worked for you, and if so which driver it worked for so I can create a working list for other people to reference.
Credits #
After many hours trawling through the internet I found the method detail above worked for me. The information in this article predominantly comes from one place:
🙏🙏🙏
Since you've made it this far, sharing this article on your favorite social media network would be highly appreciated. For feedback, please ping me on Twitter.
...or if you want fuel my next article, you could always:
Published