Карточки Broadcom BCM43xx Wireless не работают в Ubuntu 11.04

Приехали! Век новых теногологий на дворе, выходят всякие там Thunderbolt, iPad, i7 и прочее, а в новейшей сборке Linux Ubuntu 11.04 не работает из коробки Wi-Fi для карточек Broadcom BCM43xx. Вопрос – как так? Если в версиях 8.04, 8.10, 9.04, 9.10, 10.04, 10.10 эти популярные беспроводные карточки поднимались “на лету” двумя кликами, то ребята из Canonical решили, эту поддержку загубить, что-бы пользователям жизнь мёдом не казалось наверное. И это при том, что все Dell’ы имеют на борту имено продукты фирмы Broadcom, а Ubuntu якобы тесно сотрудничает с Dell, так же, стоит напомнить, что карточки Broadcom это лучшие и наиболее популярные устройства, даже Apple ставят себе на лэптопы именно их продукцию, а вот ребятам из Ubuntu на это наплевать. Ну хрен с ними, ведь в предыдущих релизах работало. Вообще тенденция роста дистрибутива Ubuntu не прогрессивна, а регрессивна, качество дистрибутива теряется с каждым новым релизом, вырезали GDebi, убрали GIMP, забыли про Rhytmbox, выкорчевали aptitude, а теперь ещё и Unity. Товарищи, это регресс!

У вас не работает Wi-Fi на карточке Broadcom BCM43xx?

Тогда вам сюда! Для начала давайте убедимся в том, что стандартный подход вам не помог, найдите у себя в системе прогу которая ставит дополнительные драйвера, в Gnome3 это “Additional Drivers”, в Gnome2 это System > Administration > Additional Drivers, в Unity хер знает где. И активируйте тамошний драйвер, после чего перезагрузите компьютер и посмотрите на LED лампочку вашего Wi-Fi, если она всё ещё не подает признаков жизни, и Wi-Fi нет, то вам стоит продолжить читать эту статью.

Вот как было у меня:

BCM43xxx

BCM43xxx

Теперь давайте немного углубимся в тестирование и проверем, что все хорошо. Определим номер модели вашей карты:
Посмотрим вывод команды lspci:

lspci -nn | grep -i broadcom
03:00.0 Ethernet controller [0200]: Broadcom Corporation BCM4401-B0 100Base-TX [14e4:170c] (rev 02)
0c:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 01)
lspci -nn | grep -i broadcom
03:00.0 Ethernet controller [0200]: Broadcom Corporation BCM4401-B0 100Base-TX [14e4:170c] (rev 02)
0c:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 01)

Посмотрим вывод команды lshw:

sudo lshw -C network
*-network               
       description: Network controller
       product: BCM4311 802.11b/g WLAN
       vendor: Broadcom Corporation
       physical id: 0
       bus info: pci@0000:0c:00.0
       version: 01
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list
       configuration: driver=b43-pci-bridge latency=0
       resources: irq:17 memory:f9ffc000-f9ffffff
  *-network
       description: Ethernet interface
       product: BCM4401-B0 100Base-TX
       vendor: Broadcom Corporation
       physical id: 0
       bus info: pci@0000:03:00.0
       logical name: eth0
       version: 02
       serial: 00:1c:23:92:8e:35
       size: 10Mbit/s
       capacity: 100Mbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm bus_master cap_list ethernet physical mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=b44 driverversion=2.0 duplex=half latency=64 link=no multicast=yes port=twisted pair speed=10Mbit/s
       resources: irq:17 memory:f9bfe000-f9bfffff
 802.11bg
sudo lshw -C network
*-network               
       description: Network controller
       product: BCM4311 802.11b/g WLAN
       vendor: Broadcom Corporation
       physical id: 0
       bus info: [email protected]:0c:00.0
       version: 01
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list
       configuration: driver=b43-pci-bridge latency=0
       resources: irq:17 memory:f9ffc000-f9ffffff
  *-network
       description: Ethernet interface
       product: BCM4401-B0 100Base-TX
       vendor: Broadcom Corporation
       physical id: 0
       bus info: [email protected]:03:00.0
       logical name: eth0
       version: 02
       serial: 00:1c:23:92:8e:35
       size: 10Mbit/s
       capacity: 100Mbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm bus_master cap_list ethernet physical mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=b44 driverversion=2.0 duplex=half latency=64 link=no multicast=yes port=twisted pair speed=10Mbit/s
       resources: irq:17 memory:f9bfe000-f9bfffff
 802.11bg

Посмотрим какие интерфейсы есть у нас в системе, должны быть eth0, wlan0, lo, но у вас будет только eth0, lo, а после обновления и того меньше, будет только lo.

Посмотрим вывод команды ifconfig:

ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0f:b0:74:9e:36  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:23 
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:740 errors:0 dropped:0 overruns:0 frame:0
          TX packets:740 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:56384 (56.3 KB)  TX bytes:56384 (56.3 KB)
ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0f:b0:74:9e:36  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:23 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:740 errors:0 dropped:0 overruns:0 frame:0
          TX packets:740 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:56384 (56.3 KB)  TX bytes:56384 (56.3 KB)

Посмотрим вывод команды iwconfig:

/sbin/iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
/sbin/iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.

Посмотрим вывод dmesg:

dmesg | grep b43 
dmesg | grep b43 

Как профиксить Broadcom BCM43xx Wireless?

Очевидно, что проблем может быть две, либо драйвер кривой у них, либо модуль драйвера не загрузился в ядро. Начнем по порядку, сначала деактивриуйте Wireless STA драйвер в “Additional Drivers”, перезагрузите копьютер. И давайте попробуем поставить все в ручную:

sudo aptitude install b43-fwcutter firmware-b43-installer
sudo aptitude install b43-fwcutter firmware-b43-installer
sudo aptitude install broadcom-sta-common broadcom-sta-source
sudo aptitude install broadcom-sta-common broadcom-sta-source

Перезагрузите компьютер. Очевидно, что драйвер у вас в системе, однако скорее всего ничего не произойдет, вы не найдете интерфейс wlan0, и ваш LED индикатор гореть не будет, как бЭ сообщая, что Wi-Fi модуль вашего компьютера не активен.

Решение этой проблемы крайне простое, не сложно догодаться, что проблема в том, что модули драйвера, почему то не загружаются в ядро при загрузке компьютера. Это утверждение легко проверить, посмотря какие модули активны:

lsmod
Module                  Size  Used by
binfmt_misc            17565  1 
snd_atiixp_modem       19128  5 
snd_atiixp             20072  2 
snd_ac97_codec        134270  2 snd_atiixp_modem,snd_atiixp
ac97_bus               12730  1 snd_ac97_codec
snd_pcm                96625  5 snd_atiixp_modem,snd_atiixp,snd_ac97_codec
snd_seq_midi           13324  0 
pcmcia                 49166  0 
snd_rawmidi            30486  1 snd_seq_midi
snd_seq_midi_event     14899  1 snd_seq_midi
joydev                 17606  0 
radeon                982197  2 
snd_seq                61621  2 snd_seq_midi,snd_seq_midi_event
snd_timer              29602  2 snd_pcm,snd_seq
ttm                    76664  1 radeon
snd_seq_device         14462  3 snd_seq_midi,snd_rawmidi,snd_seq
yenta_socket           27846  0 
tifm_7xx1              13042  0 
pcmcia_rsrc            18372  1 yenta_socket
tifm_core              15654  1 tifm_7xx1
drm_kms_helper         42136  1 radeon
psmouse                73535  0 
hp_wmi                 13706  0 
serio_raw              13166  0 
video                  19438  0 
drm                   227495  4 radeon,ttm,drm_kms_helper
i2c_algo_bit           13400  1 radeon
pcmcia_core            22569  3 pcmcia,yenta_socket,pcmcia_rsrc
edac_core              53845  0 
sparse_keymap          13898  1 hp_wmi
ppdev                  17113  0 
snd                    67382  20 snd_atiixp_modem,snd_atiixp,snd_ac97_codec,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
parport_pc             36959  1 
i2c_piix4              13303  0 
edac_mce_amd           23464  0 
soundcore              12680  1 snd
snd_page_alloc         18529  3 snd_atiixp_modem,snd_atiixp,snd_pcm
shpchp                 37297  0 
k8temp                 13016  0 
lp                     17825  0 
parport                46458  3 ppdev,parport_pc,lp
usbhid                 46956  0 
hid                    91020  1 usbhid
sdhci_pci              13989  0 
firewire_ohci          40370  0 
sdhci                  27387  1 sdhci_pci
firewire_core          62646  1 firewire_ohci
crc_itu_t              12707  1 firewire_core
tg3                   141750  0 
pata_atiixp            13165  3 
lsmod
Module                  Size  Used by
binfmt_misc            17565  1 
snd_atiixp_modem       19128  5 
snd_atiixp             20072  2 
snd_ac97_codec        134270  2 snd_atiixp_modem,snd_atiixp
ac97_bus               12730  1 snd_ac97_codec
snd_pcm                96625  5 snd_atiixp_modem,snd_atiixp,snd_ac97_codec
snd_seq_midi           13324  0 
pcmcia                 49166  0 
snd_rawmidi            30486  1 snd_seq_midi
snd_seq_midi_event     14899  1 snd_seq_midi
joydev                 17606  0 
radeon                982197  2 
snd_seq                61621  2 snd_seq_midi,snd_seq_midi_event
snd_timer              29602  2 snd_pcm,snd_seq
ttm                    76664  1 radeon
snd_seq_device         14462  3 snd_seq_midi,snd_rawmidi,snd_seq
yenta_socket           27846  0 
tifm_7xx1              13042  0 
pcmcia_rsrc            18372  1 yenta_socket
tifm_core              15654  1 tifm_7xx1
drm_kms_helper         42136  1 radeon
psmouse                73535  0 
hp_wmi                 13706  0 
serio_raw              13166  0 
video                  19438  0 
drm                   227495  4 radeon,ttm,drm_kms_helper
i2c_algo_bit           13400  1 radeon
pcmcia_core            22569  3 pcmcia,yenta_socket,pcmcia_rsrc
edac_core              53845  0 
sparse_keymap          13898  1 hp_wmi
ppdev                  17113  0 
snd                    67382  20 snd_atiixp_modem,snd_atiixp,snd_ac97_codec,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
parport_pc             36959  1 
i2c_piix4              13303  0 
edac_mce_amd           23464  0 
soundcore              12680  1 snd
snd_page_alloc         18529  3 snd_atiixp_modem,snd_atiixp,snd_pcm
shpchp                 37297  0 
k8temp                 13016  0 
lp                     17825  0 
parport                46458  3 ppdev,parport_pc,lp
usbhid                 46956  0 
hid                    91020  1 usbhid
sdhci_pci              13989  0 
firewire_ohci          40370  0 
sdhci                  27387  1 sdhci_pci
firewire_core          62646  1 firewire_ohci
crc_itu_t              12707  1 firewire_core
tg3                   141750  0 
pata_atiixp            13165  3 

Если вы внимательно изучите вывод команды lsmod, то вы не найдете там b43 и может даже b44. Тут надо уточнить, b43 это модуль для вашей беспроводной карточки, модуль b44 для вашей проводной карточки.
Давайте загрузим их в ручную:

su root
modprobe --all b43
modprobe --all b44
su root
modprobe --all b43
modprobe --all b44

Вы увидите как ваш LED индикатор Wi-Fi радостно загорелся, а в Network Manager у вас появятся беспроводное и проводное соединение.

Прошлый раз забыл довабить.
Скорее всего, после перезагрузки компьютера у вас снова пропадет сеть, это связано с тем, что либо модули по какой-то причине не подгружается автоматически в ядро Linux, либо по ошибке (тех кто собирал дистрибутив) они находятся в “черном списке” ядра, так называемый blacklist, что и происходит в нашем случае, исправить очень просто, откройте под рутом файл broadcom-sta-common.conf:

sudo nano /etc/modprobe.d/broadcom-sta-common.conf
sudo nano /etc/modprobe.d/broadcom-sta-common.conf

и закомментируете все строки связанные с b43/b44 модулями:

# wl module from Broadcom conflicts with ssb
# We must blacklist the following modules:
#blacklist b44
#blacklist b43legacy
#blacklist b43
#blacklist ssb
# wl module from Broadcom conflicts with ssb
# We must blacklist the following modules:
#blacklist b44
#blacklist b43legacy
#blacklist b43
#blacklist ssb

Это все, удачной работы.