0

I need to install any working driver for wireless for this laptop, however, after re-installing bcmwl-kernel-source which was installed with OS, I get this:

modprobe wl
FATAL: Error inserting wl (/lib/modules/3.5.0-25-generic/updates/dkms/wl.ko): Invalid argument

this driver previously worked but I was trying to get some alternative, because this driver is proprietary and didn't work with kernel 3.8.1 which I wanted to install (I am using btrfs filesystem and this new kernel fixes some issues with that).

So I rebooted back to official kernel 3.5.0 but I am unable to get this driver to work again. Now everytime I try to load it using modprobe, it return this error

dmesg:

[ 1966.302971] wl: disagrees about version of symbol cfg80211_scan_done
[ 1966.302983] wl: Unknown symbol cfg80211_scan_done (err -22)
[ 1966.303062] wl: disagrees about version of symbol cfg80211_disconnected
[ 1966.303067] wl: Unknown symbol cfg80211_disconnected (err -22)
[ 1966.303112] wl: disagrees about version of symbol wiphy_register
[ 1966.303116] wl: Unknown symbol wiphy_register (err -22)
[ 1966.303130] wl: disagrees about version of symbol wiphy_new
[ 1966.303134] wl: Unknown symbol wiphy_new (err -22)
[ 1966.303143] wl: disagrees about version of symbol cfg80211_put_bss
[ 1966.303147] wl: Unknown symbol cfg80211_put_bss (err -22)
[ 1966.303156] wl: disagrees about version of symbol cfg80211_roamed
[ 1966.303160] wl: Unknown symbol cfg80211_roamed (err -22)
[ 1966.303179] wl: disagrees about version of symbol lib80211_get_crypto_ops
[ 1966.303184] wl: Unknown symbol lib80211_get_crypto_ops (err -22)
[ 1966.303201] wl: disagrees about version of symbol cfg80211_ibss_joined
[ 1966.303205] wl: Unknown symbol cfg80211_ibss_joined (err -22)
[ 1966.303224] wl: disagrees about version of symbol cfg80211_michael_mic_failure
[ 1966.303228] wl: Unknown symbol cfg80211_michael_mic_failure (err -22)
[ 1966.303236] wl: disagrees about version of symbol cfg80211_connect_result
[ 1966.303240] wl: Unknown symbol cfg80211_connect_result (err -22)
[ 1966.303270] wl: disagrees about version of symbol wiphy_unregister
[ 1966.303274] wl: Unknown symbol wiphy_unregister (err -22)
[ 1966.303293] wl: disagrees about version of symbol cfg80211_get_bss
[ 1966.303297] wl: Unknown symbol cfg80211_get_bss (err -22)
[ 1966.303311] wl: disagrees about version of symbol __ieee80211_get_channel
[ 1966.303315] wl: Unknown symbol __ieee80211_get_channel (err -22)
[ 1966.303356] wl: disagrees about version of symbol ieee80211_channel_to_frequency
[ 1966.303360] wl: Unknown symbol ieee80211_channel_to_frequency (err -22)
[ 1966.303383] wl: disagrees about version of symbol cfg80211_inform_bss_frame
[ 1966.303387] wl: Unknown symbol cfg80211_inform_bss_frame (err -22)
[ 1966.303417] wl: disagrees about version of symbol wiphy_free
[ 1966.303421] wl: Unknown symbol wiphy_free (err -22)

I know that proprietary drivers are not much supported by ubuntu, but is there any other driver working with this?

2 Answers 2

2

Was one of the fixes you tried linux-backports-modules? If so, I'd remove it:

sudo apt-get remove --purge linux-backports-modules-cw*

Next, I'd reinstall the Broadcom driver:

sudo apt-get install --reinstall linux-headers-generic
sudo apt-get install --reinstall bcmwl-kernel-source
sudo modprobe wl

You should be all set.

0

First of all many thanks to chili555 for his answer, I gave it +1 but it's not exactly what I wanted, after a day of finding I managed to do this...

I am a c++ developer, so after lot of searching I decided to write a patch for this driver myself so that it works in 3.8.x kernel. Please note I am not a ubuntu developer and running this patch is on your own risk. Because I am lazy I didn't optimize it to run on old kernel, you can only compile it run with kernel 3.8 and newer. The patch is bellow:

Default root for dkms is /var/lib/dkms/bcmwl/6.20.155.1+bdcom (this may be different on your installation, depending on version of driver) from there:

open source/src/wl/sys/wl_cfg80211.c, change:

diff previous new
49,50c49
< static s32 wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
<            struct cfg80211_scan_request *request);
---
> static s32 wl_cfg80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request);
55c54
< static s32 wl_cfg80211_get_station(struct wiphy *wiphy,
---
> static int wl_cfg80211_get_station(struct wiphy *wiphy,
485,486c484
< wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
<                  struct cfg80211_scan_request *request)
---
> wl_cfg80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
488c486
<   struct wl_cfg80211_priv *wl = ndev_to_wl(ndev);
---
>   struct wl_cfg80211_priv *wl = wdev_to_wl(request->wdev);
532c530
<   err = wl_dev_ioctl(ndev, WLC_SCAN, &sr->wl_scan_req, param_size);
---
>   err = wl_dev_ioctl(request->wdev->netdev, WLC_SCAN, &sr->wl_scan_req, param_size);
705c703,704
<   wl_ch_to_chanspec(params->channel, &join_params, &join_params_size);
---
> 
>   wl_ch_to_chanspec(params->chandef.chan, &join_params, &join_params_size);
1388c1387
< static s32
---
> static int
1960,1961c1959,1960
<   size_t ie_len;
<   u8 *ie;
---
>   size_t ie_len = 0;
>   u8 *ie_data = NULL;
1987c1986
<       ie = ((u8 *)bi) + bi->ie_offset;
---
>       ie_data = ((u8 *)bi) + bi->ie_offset;
1991,1992c1990,1991
<       ie = bss->information_elements;
<       ie_len = bss->len_information_elements;
---
>       ie_len = (size_t) bss->ies->len;
>       ie_data = bss->ies->data;
1996c1995
<   tim = bcm_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
---
>   tim = bcm_parse_tlvs(ie_data, ie_len, WLAN_EID_TIM);

other patches are included in folder patches and should be sufficient. After you change it, save all your work, because in case something went wrong, your pc may crash and do:

cd /etc/kernel/postinst.d
sudo ./dkms 'yourkernel - for example 3.8.1' 
sudo modprobe wl

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .