Решение проблемы с wi-fi адаптером Broadcom 4313 в Linux

Я являюсь счастливым обладателем ноутбука с беспроводной wifi-карточкой Broadcom 4313… То что с ней бог знает сколько времени возникают проблемы в Линукс можно понять если набрать название карточки в гугле :)

Первое раз когда я устанавливал Calculate Linux мне пришлось испахать с десяток страниц в google прежде чем я все-таки заставил ее работать и теперь как я вижу проблема была частично решена — в новых сборках Broadcom 4313 хоть и немного через одно место но работает из коробки…

Почему «через одно место»? Да потому что если не предпринять некоторые меры в /var/log/messages начинают плодиться сотнями записи типа:

 ERROR @wl_cfg80211_get_station : Could not get rssi (-1) ERROR @wl_cfg80211_get_station : Could not get rate (-1) ERROR @wl_cfg80211_get_station : Could not get rssi (-1) ERROR @wl_cfg80211_get_station : Could not get rate (-1)

Причем эти записи валят непрерывно и заметно подтормаживают работу системы…

В общем некоторое время поковырявшись в интернете нашел решение в виде подборки патчей у старых моих друзей арчеводов в AUR  :)

К сожалению без пересборки ядра все равно не обойтись ибо необходимо отключить принудительно вшитые намертво модули так что вот такие дела.

Далее собственно инструкция которая (с небольшими поправками на ветер) пригодна не только для Calculate но и для любого в принципе дистрибутива.

Итак сам архив с исходниками драйвера для Broadcom 4313 можно скачать на этой странице.

Необходимые патчи:

license.patch
user-ioctl.patch
linux-recent.patch

Качаем здесь: patches.tar.gz.

Распаковываем файлы драйвера в пустую директорию (она может пригодиться для того чтобы пересобрать модуль при следующей переустановке ядра) туда же распаковываем и файлы патчей:

$ tar -xvf hybrid-portsrc_x86_64-v5_100_82_112.tar.gz$ tar -xvf patches.tar.gz

Пока оставляем эту директорию в покое вернемся к ней после пересборки ядра.

Первым делом удаляем пакет net-wireless/broadcom-sta чтобы при следующем обновлении ядра нам не пересобирать этот модуль — все равно его придется пересобирать вручную...

$ sudo emerge -C net-wireless/broadcom-sta

Запускаем пересборку ядра:

$ sudo cl-kernel --menuconfig

Выключаем в конфиге ядра (прежде всего BCMA support и Broadcom 43xx-legacy wireless support (mac80211 stack)):

Device Drivers --->
[*] Staging drivers --->
Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
Broadcom IEEE802.11n embedded FullMAC WLAN driver
Broadcom specific AMBA --->
BCMA support
[*] Network device support --->
[*] Wireless LAN --->
Broadcom 43xx wireless support (mac80211 stack)
Broadcom 43xx-legacy wireless support (mac80211 stack)

После пересборки ядра естественно компилируем модули:

$ sudo module-rebuild -X rebuild$ sudo emerge sys-kernel/linux-firmware

В файл /etc/modprobe.d/blacklist добавляем строчки:

blacklist b43
blacklist bcma
blacklist ssb

Перезагружаемся во вновь собранное ядро.

Далее запускаем сборку модуля в заранее приготовленной директории предварительно применив патчи:

patch -p1 -i linux-recent.patch$ patch -p1 -i user-ioctl.patch$ patch -p1 -i license.patch $ make clean && make

Смотрим версию ядра:

uname -r3.4.5-calculate

И устанавливаем драйвер в нужную директорию «методом копирования» (естественно из-под суперпользователя иначе не даст прав на запись):

$ sudo cp -f wl.ko /lib/modules/3.4.5-calculate/net/wireless/wl.ko

Обновляем подхватываем модули:

$ sudo depmod -a

Все… Теперь все должно работать безупречно что не может не радовать :)


Оригинал статьи http://pingvinoff.net/2012/08/23/reshenie-problemy-s-wi-fi-adapterom-broadcom-4313-v-linux/

0 комментариев

Оставить комментарий