8

openSUSE 13.2 and Broadcom BCM43228 wireless: Driver woes in the Linux world

 3 years ago
source link: https://msiyer.com/opensuse-13-2-and-broadcom-bcm43228-wireless-driver-woes-in-the-linux-world/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

openSUSE 13.2 and Broadcom BCM43228 wireless: Driver woes in the Linux world

msiyer

28 Nov 2014 • 2 min read

openSUSE 13.2 arrived in the beginning of November 2014. I was a bit too busy to try it. I found some free time yesterday and utilized it to install openSUSE on my workstation.

My workstation is a Dell Optiplex 9020 with i7-4770 CPU, 32 GB RAM and Broadcom BCM43228 based Dell 1540 wireless module. I managed to avoid the Microsoft Windows tax because Dell was savvy enough to ship me a machine with Linux (Ubuntu) preinstalled.

The driver for the said wireless module was already available in Ubuntu. So, when I received the machine everything was working like clockwork. I wanted to remove Ubuntu but I also wanted to avoid hunting down the drivers in the World Wide Web. Disappointingly, openSUSE did not have the driver binary in its repositories. I tried Manjaro as it was the only other distro that boasted of precompiled binaries for Broadcom BCM43228. Manjaro did not disappoint me.

For some reason, I like openSUSE more than all the other distros. I really do not know why. So, I decided to do whatever it would take to get openSUSE working on my workstation.

I searched and found that Broadcom provides the source code for the following modules:

BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-, BCM43227- and BCM43228-based hardware

Make sure that your device is in the above list. To detect the device ID, do the following:

sudo lspci | grep "Broad" 04:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n

To build any kernel module, the following packages are necessary. I had downloaded them earlier to compile the vbox driver for Virtualbox:

sudo zypper in kernel-devel gcc make

I downloaded the 64-bit version of the source. The README.txt (available for download on the Broadcom website) is an utterly important document. Read that carefully.

I started the compilation and found some errors:

/src/wl/sys/wl_cfg80211_hybrid.c:2074:4: error: too few arguments to function ‘cfg80211_ibss_joined’ cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);

There is a solution to this problem. Look for the following file in the extracted Broadcom source code:

src/wl/sys/wl_cfg80211_hybrid.c

Now, look for the following line:

[code language=”c”]

cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);

[/code]

Replace the above line with the following piece of code:

[code language=”c”]

if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)

cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, &wl->conf->channel, GFP_KERNEL);

cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);

endif

[/code]

Evidently, the Kernel API has changed and the code is not compatible with it. Compile again.

It worked fine for me and I had a driver ready to be deployed in quick time.

I just hope Broadcom fixes this issue and releases the updated code.

Further Reading:

How to load the wl.ko driver


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK