Instalando softmodems no Linux. Junho de 2006

A principal dificuldade para quem acessa via acesso discado e quer usar Linux, é instalar o driver necessário para ativar o modem. Até por volta de 1998, a maioria dos modems vendidos eram hardmodems. Estes são fáceis de configurar, pois o modem executa via hardware todas as funções necessárias. Você precisa apenas configurar o discador para procurar o modem na porta serial correta. As possibilidades vão da porta /dev/ttyS0 (com 1) à porta /dev/ttyS4 (com 5).

Infelizmente, os hardmodems são raridade hoje em dia, pois são muito mais caros. Os softmodems dominaram rapidamente o mercado, pois são mais simples e por isso custam uma fração do preço. Neles, a maior parte das funções são executadas por um software incluído no driver do modem. O sistema envia os comandos AT para o driver (e não mais diretamente ao modem) e ele (driver) se encarrega de modular o sinal, fazer a correção de erros e os demais passos necessários. Ao usar um softmodem, não adianta indicar a porta do modem no kppp: você precisa ter o driver instalado, ou nada feito.

Você pode encontrar uma explicação detalhada sobre os drivers disponíveis e como instalar cada um no meu livro <a xhref=”https://www.hardware.com.br/gdhpress/ferramentas/”>Linux, ferramentas técnicas</a>. Aqui vai um pequeno resumo dos drivers disponíveis para as distribuições Linux recentes, que utilizam o Kernel 2.6.14 em diante. Eles já vem pré instalados no Kurumin, onde você pode ativá-los através da aba “Acesso discado”, dentro do painel de controle. As instruções abaixo podem ser usadas quando você precisar usar o modem em outras distribuições, ou solucionar problemas.

Você pode identificar o modem usando o comando “lspci“, que lista todas as placas PCI instaladas na placa-mãe. Procure pela linha iniciada com “Modem” ou “Communication controller”, como em:

00:05.0 Communication controller: Conexant HSF 56k HSFi Modem (rev 01)

A marca do modem na maioria dos casos não diz muito, pois o chipset do modem é projetado por um fabricante, produzido por vários outros, comprado por um número maior ainda de pequenos fabricantes que montam as placas e finalmente vendidos por um sem número de empresas que apenas colocam sua própria marca. Independentemente do seu modem ser LG, Kayomi, Clone, ou o que quer que seja, o que importa mesmo é o chipset usado.

Os modems discados são provavelmente a categoria de dispositivos com suporte mais precário no Linux. É uma espécie de problema cultural. Quase todos os desenvolvedores e usuários avançados (que são os que podem desenvolver drivers e dar suporte) migraram rapidamente para as conexões via ADSL, cabo, rádio e outras modalidades de banda larga assim que elas tornaram-se acessíveis. Quem continua usando os modems são na sua maioria o público mais leigo, que acessa pouco e por isso chega à conclusão de que não vale a pena pagar um ADSL.

Os fabricantes vêem os modems como uma forma de commoditie, um tipo de dispositivo barato, vendido com margem reduzida de lucro, no qual não vale a pena fazer grandes investimentos. Muitas vezes não investem sequer em resolver os problemas do driver for Windows, quanto mais em desenvolver e dar suporte para uma versão Linux.

Desenvolver um driver para um softmodem é uma tarefa complexa, pois é preciso implementar via software todas as funções que o modem propriamente dito não executa, como a modulação do sinal, correção de erros e muito mais. Para você ter uma idéia, o módulo para uma placa de rede SiS900 tem 22k, enquanto o módulo que dá suporte ao modem Intel 537EP tem 1.5 MB, mais de 60 vezes maior.

No final, temos uma situação em que os fabricantes têm pouco interesse em desenvolver um driver e não divulgam as especificações. Poucos desenvolvedores têm interesse em encarar o hérculeo trabalho de desenvolver um driver fazendo engenharia reversa simplesmente porque não acessam via modem e, para completar, cada vez mais gente acessa via banda larga, fazendo com que a demanda por drivers seja cada vez menor.

Mesmo assim, vários modems possuem suporte no Linux. Pesquisando um pouco, você pode comprar diretamente um modem compatível e assim evitar muitas dores de cabeça. Se você tem em mãos um modem que não possui driver, não perca tempo com ele: venda ou troque com alguém que usa Windows e compre um modem suportado. Se puder, resolva o problema definitivamente, comprando um hardmodem externo (ligado ao PC através da porta serial), como alguns modelos comercializados pela Dlink, Trendnet e US Robotics, ou migrando para algum plano de banda larga.

Voltando aos drivers, a partir do Kernel 2.6.14, passou a vir incluído um pequeno conjunto de drivers open-source, desenvolvidos pela equipe do Alsa, responsáveis pelo desenvolvimento dos drivers para placas de som. Até certo ponto, um modem tem uma função similar à de uma placa de som: ele transforma sinais digitais em sinais analógicos e vice-versa. Um modem inclui muitas funções adicionais, como modulação de dados, compressão e correção de erros, mas os desenvolvedores têm conseguido superar as dificuldades.

Os drivers disponíveis são:

snd-intel8x0m: Este driver dá suporte aos modems Intel AC97, encontrados em muitos notebooks (incluindo a maioria dos Centrinos), aos modems onboard encontrados em placas com chipset nVidia nForce e também a alguns modems PCI com chipset Intel ou PC-Tel. Uma observação é que em alguns casos, carregar o driver do modem faz com que a placa de som pare de funcionar.

snd-atiixp-modem: Ele dá suporte aos modems onboard encontrados em notebooks com o chipset ATI IXP, como o Toshiba A70. Apesar da ATI ser uma novata no ramo de chipsets, o modem é bem suportado e mantém conexões estáveis.

snd-via82xxx-modem: Este é um driver, ainda em estágio inicial de desenvolvimento, que dá suporte aos modems onboard encontrados em placas-mãe recentes, com chipset Via. Note que muitas placas, sobretudo as PC-Chips, incluem modems AMR, que funcionam com o driver para modems Intel AC’97, ou com o slamr (que veremos a seguir).

snd-ali5451-modem: Também em estágio inicial de desenvolvimento, dá suporte aos modems onboard de placas com o chipset ALI 5451, encontrado em algumas placas de baixo custo.

Para usar qualquer um dos quatro, comece carregando o driver usando o comando “modprobe” (como root), como em:

# modprobe snd-intel8x0m

Em seguida, você precisa instalar o “slmodemd“, o utilitário que faz a interface entre o driver e o sistema, criando o dispositivo de comunicação.

Se você está usando uma distribuição derivada do Debian, pode instalá-lo via apt-get:

# apt-get install sl-modem-daemon

Em outras distribuições, procure pelo pacote “slmodem” ou “sl-modem”. Caso ele não esteja disponível, resta a opção de instalá-lo a partir do código fonte. Neste caso você vai precisar ter instalados os pacotes de desenvolvimento. No Ubuntu, instale os pacotes “build-essential”, “gcc”, “g++” e “libasound2-dev”:

# sudo apt-get install build-essential gcc g++ libasound2-dev

O próximo passo é baixar 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/
$ make SUPPORT_ALSA=1
$ su <senha>

(no Ubuntu use “sudo su”)
# make install

Depois de instalado, execute-o incluindo o parâmetro “–alsa”, que especifica que ele deve usar o driver do alsa, como em:

# killall slmodemd
# slmodemd –country=BRAZIL –alsa modem:1

O “killall slmodemd” é importante, pois se houver outra instância ativa, ele não conseguirá acessar o modem e retornará um erro. 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” (comum em notebooks Centrino). Você pode testar as 4 possibilidades até encontrar o correto no seu caso.

Ao executar o comando, incluindo o parâmetro correto, você verá uma mensagem como:

SmartLink Soft Modem: version 2.9.9d Sep 27 2005 00:00:18
symbolic link `/dev/ttySL0′ -> `/dev/pts/4′ created.
modem `modem:1′ created. TTY is `/dev/pts/4′

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

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”.

Outro driver muito usado é o “slamr“, uma espécie de “curinga”, um driver desenvolvido pela Smartlink que funciona com os modems PC-Tel onboard (ele consegue ativar simultaneamente o modem e o som onboard, ao contrário do driver antigo) e também em modems PCI LG Netodragon e até mesmo com alguns modelos de modems Intel. Você pode baixar a versão mais recente do driver no mesmo link do pacote do slmodemd:
http://linmodems.technion.ac.il/packages/smartlink/

Neste caso, você baixa o arquivo sem “alsa” no nome, como em “slmodem-2.9.11.tar.gz”. Você precisa da versão 2.9.11 ou mais recente, pois as antigas não compilam em distribuições com o Kernel 2.6.13 ou mais recente.

Para instalar o driver, você precisa ter (além dos compiladores que vimos a pouco), o pacote com os headers (ou o código fonte completo, dependendo da distribuição), do Kernel em uso. No Kurumin este é um item “de série”. No Ubuntu, use o comando “uname -a” para verificar a versão do Kernel em uso, e instale os headers via apt-get, especificando a versão, como em:

$ sudo apt-get install linux-headers-2.6.15-23-386

Com tudo nos lugares, descompacte o arquivo, acesse a pasta que será criada e rode os comandos “make” e “make install” (este último como root), como em:

$ tar -zxvf slmodem-2.9.11.tar.gz
$ cd slmodem-2.9.11/
$ make
$ su <senha>
# make install

Antes de discar, você precisa carregar o driver e executar o slmodemd. Crie um script (como vimos no tópico sobre configuração de placas Wireless) para não precisar ficar digitando-os manualmente a cada conexão.

# modprobe slamr
# slmodemd –country=BRAZIL /dev/slamr0 &

Ao abrir o slmodemd é criado o dispositivo “/dev/ttySL0”. Crie o link “/dev/modem” apontando para ele:

# ln -sf /dev/ttySL0 /dev/modem

Temos ainda os drivers comerciais para modems Conexant HSF e HCF, desenvolvidos pela Linuxant. Os drivers funcionam, mas custam US$ 19, o que acaba sendo mais caro que comprar outro modem. No site está disponível uma versão demo, onde a conexão fica limitada a 14.4k: http://www.linuxant.com/drivers.

A Intel chegou a desenvolver drivers para os modems 537 e 537EP, os famosos “Intel Ambient”, muito comuns a algum tempo atrás. Os drivers ainda estão disponíveis no http://linmodems.technion.ac.il/packages/Intel, mas não possuem muita utilidade hoje em dia, pois não dão suporte aos modems Intel atuais (os mais baratos, que usam um chip DSP pequenininho) e não compilam nas versões recentes do Kernel, da 2.6.13 em diante.

Outro exemplo de driver obsoleto é o driver para modems Lucent/Agere, que não funciona com os modelos atuais (os V92, com chipset “sv92”), e que por isso não têm mais tanta utilidade hoje em dia. De qualquer forma, caso você tenha um modem antigo, fabricado entre 2000 e 2002, pode baixar o driver disponível no: http://linmodems.technion.ac.il/packages/ltmodem/kernel-2.6/.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X