18.04.2009

Сборка драйверов Broadcom для ядра 2.6.29

В прошлом году Broadcom выпустил «приоткрытые» драйвера для некоторых своих беспроводных чипов. Для поддержки беспроводки на моём старом Dell Inspiron 2200, мне довелось перепробовать все возможные варианты: ndiswrapper, bcm43xx, b43. Купив недавно новый Dell Inspiron 1525, решил, что раз уж его BCM4312 в списке подерживаемых родным драйвером, то нужно пробовать.

Вообще было бы здорово, если бы всё это работало через module-assistant, но пока, к сожалению только так.

Система сборки там не очевидная, но не сложная. Разобрался по мурзилке. Последовательность действий для Debian Squeeze (не вижу причин, почему не должно работать на Lenny или на недревней Ubuntu, но делал именно на Squeeze):

$ sudo aptitude install build-essential kernel-headers wget
$ mkdir /usr/src/hybrid_wl && cd /usr/src/hybrid_wl
$ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5_10_79_10.tar.gz
$ tar -xzf linux_sta/hybrid-portsrc-x86_32-v5_10_79_10.tar.gz
$ make -C /usr/src/linux M=`pwd`
$ sudo cp wl.ko /lib/modules/$(uname -r)/kernel/
$ sudo depmod && sudo modprobe wl

Комментарии:

  • интересно, многие ли добавляют себя в группу src?
  • тем кто в корень публикуемого архива кладёт больше одной директории - нужно вырывать сердце и скармливать собакам

Возможно кому-то придётся ещё добавить в блэклист модули b43 и/или bcm43xx:

$ echo "blacklist b43" | tee -a /etc/modprobe.d/blacklist_local
$ echo "blacklist bcm43xx" | tee -a /etc/modprobe.d/blacklist_local

После этого зажило и работало тихо и незаметно, пока в голову не пришла светлая идея проапгрейдить ядро до 2.6.29 (было 2.6.26). Собираться тем же путём не захотело. Нашёлся набор патчей, который фиксит некоторые проблемы, (с которыми я, честно говоря, не сталкивался) и делает исходник собирабельным под 2.6.29:

$ wget -O broadcom-sta-5.10.79.10-hidden-essid.patch http://bugs.gentoo.org/attachment.cgi?id=184151
$ wget -O broadcom-sta-5.10.79.10-linux-2.6.29.patch http://bugs.gentoo.org/attachment.cgi?id=184152
$ wget -O broadcom-sta-5.10.79.10-wl_iw_v2.patch http://bugs.gentoo.org/attachment.cgi?id=187456
$ for fn in $(ls *.patch); do patch -p1 < $fn; done

Не зажило. Точнее зажило, но к точке доступа не прицепилось. И не цеплялось, пока я не нашёл вот это пост.

Драйвер теперь оказывается самостоятельно не подгружает модуль, необходимый для поддержки шифрования. Нужно добавить его в

/etc/modules
. Без перезагрузки можно сделать вот так:

sudo rmmod wl
sudo modprobe lib80211_crypt_tkip
sudo modprobe wl

Лирическое заключение. Боже, храни пользователей rolling-релизов! Патчи я нашёл в жуколовке Gentoo, подсказку насчёт модуля шифрования на форуме Arch.

Добавлено 11.05.09:

Вышла новая версия драйвера. Старые патчи для неё не работают. Новые есть здесь. Порядок сборки можно посмотреть здесь. Хорошо, что когда-то я нашёл время ознакомиться с Arch’ем и его пакетной системой.

Комментарии

18.04.09 16:58 Peter Lemenkov комментирует:

Это дрова - не открытые, никоим образом.

18.04.09 18:36 uptimebox комментирует:

Правда ваша. Приоткрытые.

28.04.09 18:18 cub-uanic комментирует:

Два вопроса.

1) какой именно у вас BCM4312 - rev01 или rev02, какой у него pciid?

2) Оживает ли Bluetooth при использовании этого драйвера?

Сам делал по вот этой доке: https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx/Feisty_No-Fluff
В результате на Dell Studio 1535: Bluetooth не пашет, но сетка живет (правда, не всегда работает после выхода из sleep/hibernate - помогает rmmod/modprobe ndiswrapper)

И еще вопрос, но немного не в тему: каким образом настраивались multimedia-keys? После установки Debian/Lenny-5.0.1 они почему-то автоматом не подхватились.

06.05.09 12:14 uptimebox комментирует:

0b:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

06.05.09 12:18 uptimebox комментирует:

Насчёт Bluetooth. Не уверен что он как-то связан с драйвером беспроводного адаптера. Не знаю как было раньше, не проверял. Сейчас работает.

03.06.09 05:51 uptimebox комментирует:

Между копированием и modprobe сделайте depmod.
 

Ответить