como instalar o driver wireless broadcom STA (wl) para asus x201e com o kernel 3.8.1

0

Eu preciso instalar qualquer driver de trabalho para wireless para este laptop, no entanto, depois de reinstalar o bcmwl-kernel-source que foi instalado com o sistema operacional, eu recebo este:

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

este driver funcionava anteriormente mas eu estava tentando obter alguma alternativa, porque esse driver é proprietário e não funcionava com o kernel 3.8.1 que eu queria instalar (estou usando o sistema de arquivos btrfs e esse novo kernel corrige alguns problemas com que).

Então eu reiniciei o kernel oficial 3.5.0, mas não consigo fazer o driver funcionar novamente. Agora toda vez que eu tento carregá-lo usando o modprobe, ele retorna esse erro

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)

Eu sei que drivers proprietários não são muito suportados pelo Ubuntu, mas existe algum outro driver trabalhando com isso?

    
por Petr 03.03.2013 / 12:12

2 respostas

2

Foi uma das correções que você tentou com o linux-backports-modules? Se assim for, eu removerei:

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

Em seguida, eu reinstalaria o driver da Broadcom:

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

Você deve estar pronto.

    
por chili555 03.03.2013 / 15:52
0
Primeiro de tudo, muitos agradecimentos ao chili555 pela sua resposta, eu dei +1, mas não é exatamente o que eu queria, depois de um dia encontrando eu consegui fazer isso ...

Eu sou um desenvolvedor de c ++, então depois de muita pesquisa eu decidi escrever um patch para este driver eu mesmo para que ele funcionasse no kernel 3.8.x. Por favor note que eu não sou um desenvolvedor do Ubuntu e rodar este patch é por sua conta e risco. Porque eu sou preguiçoso, eu não o otimizei para rodar no kernel antigo, você só pode compilá-lo rodando com o kernel 3.8 e mais novo. O patch está abaixo:

A raiz padrão para dkms é /var/lib/dkms/bcmwl/6.20.155.1+bdcom (isso pode ser diferente em sua instalação, dependendo da versão do driver):

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

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);

outras correções estão incluídas nos patches das pastas e devem ser suficientes. Depois de alterá-lo, salve todo o seu trabalho, porque no caso de algo dar errado, o seu PC pode travar e fazer:

cd /etc/kernel/postinst.d
sudo ./dkms 'yourkernel - for example 3.8.1' 
sudo modprobe wl
    
por Petr 03.03.2013 / 21:14