Broadcom BCM4312 802.11b/g LP-PHY

De Fórum Debian Wiki

Índice de conteúdo

Considerações iniciais

Esse artigo se propõe a descrever os passos para instalar o driver da placa Broadcom BCM4312 802.11b/g LP-PHY. O procedimento funcionará tanto no Lenny quanto no Squeeze. A saída de lspci no terminal é a seguinte para o hardware em questão:

# lspci
02:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)

obs: segundo o site do fabricante, o driver também funcionará nas placas BCM4311, BCM4313, BCM4321, BCM4322, BCM43224, BCM43225, pois todas usam o módulo wl, o qual será compilado a seguir.


Pacotes necessários

A instalação do driver nada mais é do que a compilação de um módulo do kernel. Para isso, você precisará de algumas ferramentas de compilação. Além disso, também será preciso o wireless-tools para o Debian lidar com a rede wireless, caso não esteja instalado:

# aptitude install build-essential linux-kernel-headers wireless-tools


Kernel Vanilla

Se você compilou um kernel vanilla, isto é, um kernel que não é o padrão da distribuição e não está nos repositórios do Debian, você terá que compilar os headers de seu kernel utilizando a ferramenta make-kpkg. Veja esse artigo para maiores informações.

obs: se você não sabe do que isso se trata, você provavelmente não possui um kernel vanilla compilado; não se preocupe, pule para a etapa seguinte.


Evitando conflito com outros módulos

Alguns módulos podem impedir o correto funcionamento do módulo que iremos instalar e, por isso, eles devem ser descarregados se estiverem ativos:

# rmmod brcm80211 b43 b44 b43legacy ssb


Para evitar que esses módulos voltem a ser carregados nas próximas inicializações, é preciso bloqueá-los na blacklist:

# echo blacklist brcm80211 > /etc/modprobe.d/broadcom-sta-common.conf
# echo blacklist b43 >> /etc/modprobe.d/broadcom-sta-common.conf
# echo blacklist b44 >> /etc/modprobe.d/broadcom-sta-common.conf
# echo blacklist b43legacy >> /etc/modprobe.d/broadcom-sta-common.conf


Depois de muita dor de cabeça, descobri que não adianta adicionar o módulo ssb na blacklist, pois ele persistirá em ser carregado na inicialização. Para lidar com ele, será preciso editar o arquivo /etc/rc.local e acrescentar a seguinte linha, antes de exit 0

rmmod ssb


Compilação do módulo wl

Primeiramente você precisa saber se sua distribuição é de 32 bits ou 64 bits. Se estiver em dúvida, rode o comando abaixo e se aparecer i686 é 32bits.

$ uname -m


Faça download do código fonte para a arquitetura de sua distribuição (32 bits ou 64 bits) no seguinte link:

http://www.broadcom.com/support/802.11/linux_sta.php


Descompacte o arquivo:

$ tar -zxvf hybrid-portsrc[PRESSIONE TAB]


Entre na pasta que foi criada na descompactação e rode os seguintes comando como root:

# make -C /lib/modules/`uname -r`/build M=`pwd`
# modprobe lib80211
# insmod wl.ko 
# cp wl.ko /lib/modules/`uname -r`/kernel/net/wireless/
# depmod -a 


Inicializando o módulo automaticamente

Edite novamente o arquivo /etc/rc.local e acrescente uma linha para modprobe wl após a entrada para rmmod ssb e antes de exit 0. Seu arquivo deverá ficar exatamente assim ao final:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

rmmod ssb
modprobe wl

exit 0


obs: essa não é a solução mais elegante, mas excepcionalmente para esse caso, é a única que funciona, pois módulo ssb insistirá em inicializar e o módulo wl somente funcionará adequadamente se for inicializado quando o ssb estiver descarregado.


Considerações finais

1. Seu driver já está instalado e configurado para ser usado. Se você usa um ambiente gráfico que possua ferramenta para configuração automática de rede wireless, a esse ponto você já estará apto a se conectar e navegar na internet. Para confirmar se sua placa foi corretamente reconhecida pelo sistema, rode o comando:

# iwconfig


2. Se você não compilou o driver e optou por tentar instalá-lo utilizando o módule-assistant, talvez você tenha recebido o seguinte erro:

make[2]: Entering directory `/usr/src/linux-headers-2.6.35-24-generic'
CC [M] /usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.o
/usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.c: In function
‘_wl_set_multicast_list’:
/usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.c:1435: error:
‘struct net_device’ has no member named ‘mc_list’
/usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.c:1435: error:
‘struct net_device’ has no member named ‘mc_count’
/usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.c:1436: error:
dereferencing pointer to incomplete type
/usr/src/modules/broadcom-sta/amd64/src/wl/sys/wl_linux.c:1442: error:
dereferencing pointer to incomplete type

Nesse caso, cancele o procedimento com o módule-assistant e siga os procedimentos contidos aqui, desde o começo.


3. Quando você instalar uma nova versão do kernel, o procedimento terá que ser repetido, pois os módulos de uma versão não irão funcionar na outra.


4. Para maiores informações, veja também:

http://www.vivaolinux.com.br/dica/Broadcom-BCM4312-com-driver-nativo-do-Linux

http://www.broadcom.com/docs/linux_sta/README.txt

http://wiki.debian.org/bcm43xx

http://wiki.debian.org/wl

http://www.forumdebian.com.br

Ferramentas pessoais