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