воскресенье, 3 июля 2011 г.

Как я решил проблему с картой Broadcom BCM4312 в Kubuntu

Когда я установил на ноутбуке Lenovo E43 операционную систему Kubuntu 10.04, то я никак не мог заставить беспроводную карту Broadcom BCM4312 работать. Пробовал и проприетарные драйвера, и аналоги. Перепробовал кучу способов, и один из них мне помог. Представленное ниже решение помогает запустить беспроводную карту Broadcom BCM4312 в системе Kubuntu 10.04.2 и это решение было проверенно мною при обновлении системы от ядра 2.6.32-21 до ядра 2.6.32-32.

Во первых, проверяем, какая беспроводная карта установлена на ноутбуке. Для этого выполняем в консоли следующую команду:
$ $ lspci -vvnn | grep 802.11
На моем ноутбуке Lenovo E43 я получил следующий ответ:
06:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)

Т.е. установлена беспроводная карта Broadcom BCM4312.
В ядро системы Kubuntu  входит модуль b43.ko, который содержит open source драйвер для беспроводных карт Broadcom 43XX, но этот драйвер работал на моем ноутбуке отвратительно: соединение устанавливалось только на несколько секунд, а потом сбрасывалось.
Итак, вот решение, которое я нашел:
1) На странице http://www.broadcom.com/support/802.11/linux_sta.php скачиваем исходный код драйвера для 32-битных Linux-систем. На данный момент это файл hybrid-portsrc_x86_32-v5_100_82_38.tar.gz, но когда я решал проблему, я скачивал более раннюю версию драйвера: hybrid-portsrc-x86_32-v5.60.48.36.tar.gz. Возможно, когда Вы будете скачивать файл, его версия (соответственно, и его название) будет уже другой. Допустим, Вы скачали этот драйвер в папку /tmp.
2) Разархивировать скачанный файл:
$ cd /tmp
/tmp$ tar xfz hybrid-portsrc_x86_32-v5_100_82_38.tar.gz
В архиве содержатся папки lib, src и файл Makefile. Они будут разархивированы в ту же папку tmp.
3) Скомпилировать драйвер для Вашей системы:
/tmp$ make
На моей машине результат был следующий:
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-32-generic'
  LD      /tmp/tmp/built-in.o
  CC [M]  /tmp/tmp/src/shared/linux_osl.o
  CC [M]  /tmp/tmp/src/wl/sys/wl_linux.o
  CC [M]  /tmp/tmp/src/wl/sys/wl_iw.o
  LD [M]  /tmp/tmp/wl.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /tmp/tmp/wl.o
see include/linux/module.h for more information
  CC      /tmp/tmp/wl.mod.o
  LD [M]  /tmp/tmp/wl.ko
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-32-generic'
В папке tmp появятся несколько файлов, главный из которых - wl.ko. Это модуль для ядра Вашей системы Linux, в котором содержится драйвер для беспроводных карт Broadcom.
4) Нужно поместить этот файл в папку с другими модулями ядра.

/tmp$ sudo cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
5) Нужно убрать из ядра глючный драйвер b43.ko и поместить вместо него новоскомпилированный драйвер wl.ko:
$sudo rmmod b43
$sudo depmod
$sudo modprobe wl
 6) Проверяем беспроводное соединение.

Что ещё можно почитать по данной теме:
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx

2 комментария:

  1. При обновлении до ядра 2.6.32-34 не пришлось компилировать драйвер wl.ko: он появился автоматически в папке /lib/modules/2.6.32-34-generic/updates/dkms и работает без проблем.

    ОтветитьУдалить
  2. При обновлении до ядра 2.6.32-37 выяснилось, что драйвер wl.ko не был включен ни в состав драйверов /lib/modules/2.6.32-37-generic/kernel/drivers/, ни в папку /lib/modules/2.6.32-37-generic/updates/dkms, а драйвер b43.ko по-прежнему глючит. Поэтому пришлось собирать драйвер wl.ko по изложенной в статье инструкции из исходников http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz

    ОтветитьУдалить