как установить беспроводной драйвер broadcom STA (wl) для asus x201e с ядром 3.8.1

Мне нужно установить любой работающий драйвер для беспроводной связи для этого ноутбука, однако после переустановки bcmwl-kernel-source, который был установлен с ОС, я получаю следующее:

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

этот драйвер ранее работал но я пытался найти какую-то альтернативу, потому что этот драйвер проприетарный и не работал с ядром 3.8.1, которое я хотел установить (я использую файловую систему btrfs, и это новое ядро ​​исправляет некоторые проблемы с этим).

Итак, я перезагружен обратно к официальному ядру 3.5.0, но не могу заставить этот драйвер снова работать. Теперь каждый раз, когда я пытаюсь загрузить его с помощью modprobe, он возвращает эту ошибку

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)

Я знаю, что проприетарные драйверы не очень поддерживаются в Ubuntu, но есть ли другой работающий драйвер с этим?

0
задан 4 March 2013 в 00:15

2 ответа

Было ли одно из исправлений, которые вы попробовали linux-backports-modules? Если так, я бы удалил его:

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

Далее я бы переустановил драйвер Broadcom:

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

У вас все должно быть в порядке.

0
ответ дан 4 March 2013 в 00:15

В первую очередь, большое спасибо chili555 для его ответа, я дал его +1, но это не точно, что я хотел, после дня нахождения мне удалось сделать это...

Я - разработчик C++, поэтому после партии поиска я решил записать патч для этого драйвера сам так, чтобы это работало в 3.8.x ядро. Обратите внимание, что я не разработчик человечности, и выполняющий этот патч находится на Вашем собственном риске. Поскольку я ленив, я не оптимизировал его для работы старого ядра, можно только скомпилировать выполненный с ядром 3.8 и более новый. Патч является ревом:

Значение по умолчанию поддерживает dkms,/var/lib/dkms/bcmwl/6.20.155.1+bdcom (это может отличаться на Вашей установке, в зависимости от версии драйвера), оттуда:

открытый исходный код/src/wl/sys/wl_cfg80211.c, изменение:

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

другие патчи включены в патчи папки и должны быть достаточными. После того, как Вы изменяете его, сохраняете всю Вашу работу, потому что в случае, если что-то пошло не так, как надо, Ваш ПК может разрушить и сделать:

cd /etc/kernel/postinst.d
sudo ./dkms 'yourkernel - for example 3.8.1' 
sudo modprobe wl
0
ответ дан 4 March 2013 в 00:15

Другие вопросы по тегам:

Похожие вопросы: