|
|
Guia: Configurando modems e placas wireless no LinuxCarlos E. Morimoto 08/01/2006 Driver da Smartlink
A lista de modems suportados por este driver inclui: a) Quase todos os modems PC-Tel onboard, incluindo os das placas M810, M812, etc. da PC-Chips e de vários notebooks. O driver permite usar a placa de som onboard ao mesmo tempo que o modem. b) Modems PCI com chipset PC-Tel recentes, como os LG-Netodragon. Estes modems possuem um chipset relativamente grande, com a marca "Smartlink" decalcada.
c) Alguns modems com chipset Intel. O driver da Smartlink era usado nestes casos como uma solução precária, até que a própria Intel lançou seus drivers. A página de download dos drivers é a http://www.smlink.com/ (Support > Drivers Download > Linux Drivers). Um link alternativo é o http://linmodems.technion.ac.il/packages/smartlink/ , que contém um arquivo com várias versões do driver. Antigamente, existiam duas versões do driver, o "slmdm" era o driver antigo, que funcionava nas distribuições com Kernel 2.4, enquanto o "slmodem" era a versão recente, que funcionava no Kernel 2.6. Mas, as versões recentes do slmodem passaram a funcionar tanto no Kernel 2.6, quanto no antigo 2.4, tornando o outro driver obsoleto. Para instalar, comece descompactando o arquivo baixado, como em: $ tar -zxvf slmodem-2.9.10.tar.gz Acesse a pasta que será criada: $ cd slmodem-2.9.10/ Leia o arquivo README que contém várias informações sobre o driver e os modems suportados por ele, além das instruções de instalação. O procedimento básico de instalação é rodar o comando "make" (dentro da pasta, como root) que vai compilar o driver e em seguida o comando "make install" (que faz a instalação propriamente dita). O próprio instalador se encarrega de adicionar a linha necessária no arquivo "/etc/modules.conf", criar o device, criar o link "/dev/modem" apontando para ele e adicionar uma entrada para o módulo "slamr" no arquivo "/etc/modules.conf", para que ele seja carregado durante o boot. A maior parte dos problemas de instalação deste driver ocorrem por falta da instalação dos compiladores ou por falta do pacote kernel-source. Na maioria das distribuições, especialmente no caso do Mandriva, apenas o pacote kernel-headers não é suficiente, você precisa instalar mesmo o pacote kernel-source. Ele é grande, mas é necessário neste caso. Entre os compiladores, verifique especialmente se o pacote "libc6-dev" está instalado. A versão atual do driver da Smartlink (slmodem) trabalha de uma forma um pouco diferente das antigas. É importante entender como o driver funciona, já que é muito comum aparecerem problemas diversos ao tentar conectar. Ao instalar, além dos módulos do Kernel, copiados para a pasta "/lib/modules/2.x.x/extra", é instalado um aplicativo de gerenciamento, o "/usr/sbin/slmodemd", que cria uma pasta de logs, a "/var/lib/slmodem". Estes são os passos para ativar o driver manualmente caso necessário: a) Criar os dispositivos: # mknod -m 600 /dev/slamr0 c 212 0 ; mknod -m 600 /dev/slamr1 c 212 1 ; mknod -m 600 /dev/slamr2 c 212 2 ; mknod -m 600/dev/slamr3 c 212 3 b) Carregar o módulo do modem: # modprobe slamr c) Ativar o slmodemd. Ele precisa ficar ativo, pois ao fechá-lo o modem deixa de funcionar. Por isso, o executamos incluindo o "&": # slmodemd --country=BRAZIL /dev/slamr0 & d) Ao abrir o slmodemd é criado o dispositivo /dev/ttySL0. Crie o link /dev/modem apontando para ele: # ln -sf /dev/ttySL0 /dev/modem O driver oferece suporte também a modems PC-Tel USB (raros aqui no Brasil). Caso você tenha um destes, use o módulo "slusb" no lugar do "slamr".
Caso a conexão seja efetuada normalmente, mas você não consiga navegar, verifique se o endereço do servidor DNS do provedor (ou qualquer outro DNS válido) foi adicionado corretamente ao arquivo "/etc/resolv.conf". Isto é muito comum quando o kppp é aberto com um login normal de usuário. Caso o problema persista, pode ser que o sistema não esteja usando o modem como rota padrão (isso é comum caso você tenha também uma placa de rede). Para ajustar isso manualmente, use o comando: # route add default ppp0 Em versões antigas, era necessário usar o comando "route del default" (que remove a rota padrão anterior) antes do "route add default ppp0" (que indica o uso do modem). Atualmente apenas o segundo comando basta.
O driver não compila acusando um erro no arquivo "modem.c" e, mesmo depois que o erro dentro do código é manualmente corrigido, ele continua não funcionando, exibindo um erro ao carregar o módulo:
insmod:
error inserting '/lib/modules/2.6.14-kanotix-6/misc/slamr.ko': Este erro é conhecido e afeta todas as distribuições recentes, baseadas no Kernel 2.6.13 em diante. A Smartlink ainda não disponibilizou uma versão corrigida do driver e nem existe previsão para isto, já que a última versão do driver foi lançada em abril de 2005, quando o problema já existia. Mesmo
na lista do Kernel, a única referência sobre o problema
é esta mensagem, que simplesmente recomenda o uso dos drivers
open-source incluídos recentemente no Alsa (veja a seguir),
sem indicar uma solução para o driver original:
Pesquisando mais a fundo, encontrei dois patches distintos, um postado na lista do Fedora e outro no Linux-on-Laptops. Isoladamente, nenhum dos dois corrige o problema, mas combinando ambos é possível chegar a uma versão corrigida do driver, que funciona perfeitamente no Kernel 2.6.14 e, possivelmente, qualquer outra versão recente onde o driver regular apresenta o problema. http://forums.fedoraforum.org/showthread.php?t=60278 Aplicar os patches envolve modificar o código fonte da camada do driver que faz a junção com o Kernel, o que é trabalhoso. O primeiro patch pode ser aplicado diretamente usando o comando "patch", enquanto o outro precisa ser aplicado manualmente. Outro problema é que, para que o driver funcione, é necessário alterar a linha com a licença para "GPL". Isso é mais problemático (do ponto de vista legal) do que pode parecer à primeira vista. Nas versões atuais do Kernel, muitas funções estão disponíveis apenas para uso de módulos marcados como GPL. A alteração da licença dentro do código do driver burla isso, fazendo com que o driver da Smartlink seja tratado como se fosse um módulo GPL pelo Kernel, embora seja um módulo proprietário. Tecnicamente, isto é uma violação tanto da licença da Smartlink, quanto da própria licença GPL, sob a qual é distribuído o Kernel. Embora você possa aplicar a modificação e gerar o módulo para uso pessoal, não é permitido redistribuir o módulo modificado. Você pode ver mais detalhes sobre esta parte legal aqui: http://www.ussg.iu.edu/hypermail/linux/kernel/0511.0/0285.html . Este parece ser o principal motivo de não existir até hoje uma versão atualizada do driver. Para não violar a GPL, a Smartlink precisaria ou disponibilizar o código, transformando-o num módulo GPL, ou modificar o driver de forma que ele não utilize nenhuma das funções restritas do Kernel (o que seria trabalhoso e provavelmente demorado). A única solução imediata é que cada um aplique as modificações e compile o módulo localmente, sem redistribuir o módulo gerado. Você pode ensinar seu amigo a compilar o driver, pode escrever um script para fazer isso automaticamente para ele, mas ele é quem deve apertar o botão. Bem, você já deve ter entendido o espírito da coisa ;). Voltando
à parte técnica, baixe o arquivo
"slmodem-2.9.10.tar.gz"
aqui: Baixe
o patch com as modificações aqui, salvando-o na mesma
pasta que o
driver: Descompacte o arquivo do driver: $ tar -zxvf slmodem-2.9.10.tar.gz Aplique o patch (você deve ter o pacote "patch" instalado): $ patch -p0 < slmodem-2.9.10.patch Acesse agora a pasta com o driver e compile da forma usual: $
cd slmodem-2.9.10 Isto conclui a instalação normal do driver, fica faltando apenas iniciar o slmodemd com o comando que vimos a pouco e discar usando o Kppp ou outro discador. O default dos discadores é já utilizar o "/dev/modem", por isso você só precisa se preocupar em criar a conexão com o provedor. Caso o Kppp não exiba o modem na lista "Modems", adicione-o manualmente, clicando no "Modems > Novo...". Dê um nome qualquer e marque a opção "/dev/modem" no campo "Dispositivo de Modem". Você pode usar a função "Perguntar o Modem" para verificar se o modem está respondendo sem precisar realmente discar.
Intel AC'97 e ATI IXP
- ATI IXP: Este é outro driver open-source, que faz parte do Alsa. Ele dá suporte aos modems onboard encontrados em notebooks com o chipset ATI IXP, como o Toshiba A70. Ele é carregado através do driver "snd-atiixp-modem". Estão disponíveis também os drivers "snd-via82xxx-modem" (que dão suporte aos modems onboard encontrados em placas mãe recentes, com chipset Via) e também o "snd-ali5451-modem" (ainda em estágio primário de desenvolvimento) que visa oferecer suporte aos modems encontrados em placas com chipset ALI 5451.
A primeira parte é carregar o módulo que dá suporte ao modem (carregado no lugar do slamr), como em: #
modprobe snd-intel8x0m Para que ele passe a ser carregado automaticamente durante o boot, adicione o módulo no final do arquivo "/etc/modules". O passo seguinte é compilar o executável "/usr/sbin/slmodemd" com suporte aos módulos Alsa. Para isso, baixe o pacote "slmodem-2.9.9d-alsa.tar.gz" (ou a versão mais recente no momento em que estiver lendo) no http://linmodems.technion.ac.il/packages/smartlink/ . Note que você precisa baixar um dos arquivos com "alsa" no nome. Descompacte o arquivo, acesse a pasta que será criada e rode os comandos: $
cd modem/ Para compilar o driver com suporte a Alsa, além dos compiladores de praxe, você precisará do pacote "libasound2-dev". Lembre-se também de que ao instalar uma versão do driver anterior à 2.9.11 num Kernel recente, você precisará primeiro instalar o patch para o driver Smartlink, que citei anteriormente. Como neste caso você precisa apenas do executável do slmodem e não dos módulos slamr e slusb, você pode em muitos casos utilizar os pacotes incluídos nas distribuições, ao invés de precisar compilar dos fontes. Nas distribuições derivadas do Debian, instale o pacote "sl-modem-daemon": # apt-get install sl-modem-daemon Em outras distribuições, procure pelo pacote "slmodem" ou "sl-modem". Com o "/usr/sbin/slmodemd" instalado, execute-o, especificando o parâmetro "--alsa", que especifica que ele deve usar o driver do alsa, ao invés do slamr: # /usr/sbin/slmodemd --country=BRAZIL --alsa modem:1 O "modem:1" especifica o dispositivo do modem (da forma como é referenciado pelo driver). Dependendo da versão do driver usada, o modem pode ser visto como "modem:1", "hw:1", "modem:0" (atribuído geralmente ao ATI IXP) ou "hw:0". Você pode testar as 4 possibilidades até encontrar o correto no seu caso. Ao executar o comando, você verá uma mensagem como:
SmartLink
Soft Modem: version 2.9.9d Sep 27 2005 00:00:18 Use `/dev/ttySL0' as modem device, Ctrl+C for termination. Como pode ver, o slmodemd é um programa que fica residente. Ao fechá-lo, o acesso ao modem é desativado. Se não quiser que ele obstrua o terminal, use o "&" no final do comando. O "/dev/ttySL0" é o dispositivo por onde o modem é acessado. Crie o link "/dev/modem" apontando para ele, assim fica muito mais fácil localizar o modem dentro do programa de discagem: # ln -sf /dev/ttySL0 /dev/modem Ao usar o pacote do Debian, você pode ativar o driver de usa forma mais simples, usando o comando "/etc/init.d/sl-modem-daemon start". Ele se encarrega de ativar o slmodemd e criar o link "/dev/modem" apontando para o dispositivo correto. A partir daí, você pode discar usando o KPPP. Este é o resultado do relatório gerado pelo "perguntar ao modem" do KPPP de um Intel AC'97 usado no HP NX6110. Como pode ver, ele é detectado como se fosse um modem Smartlink, por causa do uso do slmodemd. A pista para o driver que está realmente sendo usado é a linha "modem:1 alsa modem driver".
Intel 537 e 536
Com relação aos modems, existem três drivers diferentes que podem ser usados sob o Kernel 2.6. Os dois drivers mais usados são o "intel-537EP" e o "intel-537", usados pelos modems Intel Ambient vendidos atualmente. Você pode diferenciar os dois usando o comando "lspci". O 537 aparece como "Intel Tigerjet" enquanto o 537ep aparece como "Intel Ambient".
Os modems Ambient com chip TigerJet são os mais comuns, na dúvida experimente primeiro o driver "intel-537". Caso o KPPP trave no "Procurando Modem" ou ao tentar estabelecer a conexão, tente o "537EP". Os dois drivers estão disponíveis no: http://linmodems.technion.ac.il/packages/Intel/537/ . A página é um arquivo com várias versões do driver, incluindo versões antigas, que só funcionam no Kernel 2.4. Enquanto escrevo, as versão mais recentes dos drivers para o Kernel são ainda os arquivos "intel-537-2.60.80.0.tgz" e "intel-537EP-2.60.80.0.tgz", lançados em Outubro de 2004. O terceiro driver é o "intel-536ep", que dá suporte aos modems Intel 536EP, um modelo de modem relativamente comum por volta do início de 2003. No chipset vem escrito "Intel Han". O driver para ele está disponível no http://linmodems.technion.ac.il/packages/Intel/536/ . Ao instalar em qualquer distribuição com o Kernel 2.6, baixe o arquivo "intel-536EP-2.56.76.0.tgz" (ou mais recente). A instalação dos três drivers é similar. Depois de baixar o arquivo correspondente, descompacte-o e acesse a pasta criada, como em: $
tar -zxvf intel-537-2.60.80.0.tgz Compile e instale o driver usando os comandos: $
make 537 No caso do driver para o Intel 536EP, o segundo comando é "make 536". Isso vai gerar o módulo "Intel537.ko" (ou 536), que será instalado na pasta /lib/modules/2.6.x.x/misc/", de forma automática. Para corrigir o problema, baixe e descompacte o arquivo, acesse a pasta que será criada e, antes de rodar os comandos "make 537" e "make install", rode o comando: $ sed -i -e 's/PM_SAVE_STATE/PM_SUSPEND_MEM/g' coredrv/coredrv.c Como você pode ver, ele faz uma pequena alteração no arquivo coredrv/coredrv.c, que resolve o problema. Depois disso, execute o comando "make 537" e o driver compilará normalmente. Esta mesma dica ser ve para os três drivers, sem nenhuma alteração no comando. O instalador tenta carregar os drivers no final do processo, caso você esteja instalando o driver correto o modem já estará pronto para usar. Os passos para carregar os módulos manualmente em casos de problemas com a instalação estão abaixo. Para usá-los, você deve ter, pelo menos, conseguido compilar o módulo. #
insmod -f Intel537.ko Você pode encontrar as versões mais recentes dos drivers para modems Intel também no: http://developer.intel.com/design/modems/support/drivers.htm . A página é desorganizada, mas é o melhor lugar para encontrar as últimas versões dos pacotes, antes que eles sejam publicados no Linmodems e outros sites.
Lucent e Agere
Se os modems Lucent originais ainda fossem fabricados, a pergunta "qual o melhor softmodem para usar no Linux?" teria uma resposta fácil. O problema é que eles deixaram de ser fabricados por volta do final de 2002, quando foram substituídos pelos modems SV92, SV92B e SV92P fabricados pela Agere, que são incompatíveis com o driver original. Neles, o driver é carregado normalmente e detecta o modem, mas não consegue abrir a linha, fazendo com que você fique num eterno "sem tom de discagem". O código do modelo vem decalcado no chip do modem. Esta é uma foto do chipset de um dos modems que não funcionam:
O
driver para os modems Lucent antigos, pode ser baixado
no: Para instalar, comece descompactando o arquivo e acessando a pasta que será criada:
$ tar -zxvf
ltmodem-8.31b1.tar.gz Leia o arquivo 1ST-READ que contém as instruções de instalação. O programa de instalação é bem explicativo, funciona como uma espécie de wizard, orientando durante a instalação e avisando sobre problemas comuns que podem ocorrer. Os três comandos que fazem a instalação propriamente dita são: $
./build_module O primeiro comando gera os módulos "ltmodem.ko" e "ltserial.ko", o segundo copia-os para a pasta de módulos do Kernel e gera o link "/dev/modem" apontando para o dispositivo correto, enquanto o terceiro gera um script que se encarrega de carregar os módulos durante o boot. Existe um driver antigo que dá suporte a uma variação do Agere SV92, usado como modem onboard em alguns notebooks IBM Thinkpad. Este é um driver específico, que não dá suporte aos SV92 encontrados em versão PCI: http://linmodems.technion.ac.il/packages/ageresoftmodem/ .
PC-Tel PCI Ele pode ser baixado no: http://linmodems.technion.ac.il/pctel-linux/welcome.html Enquanto escrevo, a versão mais atual é o arquivo: pctel-0.9.7-9-rht-4c.tar.gz. Para instalá-lo, descompacte o arquivo, acesse a pasta "pctel-0.9.7-9-rht-4c/src/" e rode o comando "./configure -manual", como root: $
tar -zxvf pctel-0.9.7-9-rht-4c.tar.gz O instalador pergunta o chipset para o qual será gerado o módulo, responda "pct789", que é o usado no PC-Tel Micromodem. Os outros módulos ainda não funcionam no Kernel 2.6 nesta versão do driver.
please
enter your hal type Se você tem um PC-Tel onboard numa PC-Chips M748, por exemplo, que usa a opção cm8738, vai precisar esperar mais um pouco. Os outros tipos são atendidos pelo driver da Smartlink, por isso talvez nunca sejam portados. Falta agora apenas compilar o módulo e concluir a instalação, usando os comandos make e make install. Como de praxe, você precisa ter os headers do Kernel e um conjunto básico de compiladores para que a instalação seja bem sucedida: #
make No meu caso, a primeira tentativa voltou um erro numa função não declarada dentro de um dos arquivos, um erro simples, que pode ser corrigido sem muita dificuldade:
make[1]:
Entering directory `/usr/src/kernel-headers-2.6.14-kanotix-6' Como pode ver pela mensagem de erro, o instalador está reclamando de uma função chamada "MCA_bus", dentro do arquivo "linmodem-2.6.c". Abrindo o arquivo, e usando a função de procura do editor de texto, encontrei este trecho:
#ifdef
CONFIG_MCA Como esta é apenas uma função de verificação (nada essencial), você pode simplesmente apagar toda a função e salvar o arquivo. Isto fez o módulo passar a compilar sem erros, instalando os arquivos "linmodem.ko", "pctel.ko" e "pctel_hw.ko" dentro da pasta "/lib/modules/2.6.x/misc/". Para ativar o modem é necessário carregar os três módulos e criar o link "/dev/modem" apontando para o dispositivo que será criado: #
modprobe linmodem #
rm -f /dev/modem Depois é só abrir o KPPP, testar o modem e tentar discar. Para que o carregamento dos módulos seja feito automaticamente durante o boot, inclua os comandos no final do arquivo "/etc/init.d/bootmisc.sh" ou "/etc/rc.d/rc.local".
Modems com chipset Conexant
Estes drivers são "semi-abertos", a Conexant disponibilizou um módulo binário, que controla as funções básicas do modem e o restante do driver passou a ser desenvolvido pela Linuxant, de modo que a parte open-source é independente da parte proprietária. A Linuxant, desenvolve os drivers e dá suporte a eles, sem apoio do fabricante. O problema é que o driver é vendido por US$ 19, com a opção de uma versão de demonstração limitada a 14.4k. O driver pode ser baixado no: http://www.linuxant.com/drivers/hsf/full/downloads.php . Para instalar, descompacte o arquivo e, dentro da pasta, execute os comandos: #
make install O primeiro faz a instalação do driver e o segundo detecta o modem instalado, compila o módulo e faz a configuração necessária. É nesta parte que você precisa fornecer a chave de instalação, obtida ao comprar o driver. Sem a chave o driver funciona em modo "demo", com a velocidade limitada a 14.4k. Embora o driver seja de boa qualidade, o valor só é justificável para quem tem um notebook com o modem onboard e realmente o usa. Para quem tem um desktop, sai mais barato trocar o modem por um dos modelos suportados. Por causa da limitação, estes drivers não são incluídos nas versões recentes do Kurumin. Acesso discado já é lento, a 14.4 então, é melhor nem perder tempo ;).
|