:. Diferenças na instalação de modems

 Por Carlos E. Morimoto
 http://www.guiadohardware.net
 14/05/2002


"Pelo que eu entendi nas minha leituras, a configuração da porta serial é uma configuração de hardware, certo? Me corrija se tiver errado. Ou seja a configuração da porta serial ficaria gravada em algum chip na placa de modem. Certo?

O comando setserial configura o driver, para que possa se comunicar com o modem, Certo?

No caso dos modens isa com jumper, tudo bem, a configuração é feita pelo jumper, e se não tiver jumper, usamos o isapnp, pnpdump e isapnp.conf. configurando porta serial, irq e I/O. Certo?

No caso dos modens PCI, a configuração da porta serial, irq e I/O é feita automaticamente pelo sistema operacional. Certo?

E pelo que eu pude ver, pode-se tentar definir a irq através do setup da bios definindo o irq para cada slot pci. Ou usando setpci, já tentei mas não consegui.

Quando tive que configurar um modem USR PCI, tentei usar uma porta serial ttyS15, tirada de uma receitinha, mas não funcionou. Foi então que olhei no dmesg e vi o reconhecimento do modem durante a inicialização, mas com a porta ttyS4. Foi só usar essa porta no setserial e tudo beleza!

Neste final de semana tive minha primeira experiência com um modem HSP56 micromodem (não on board), e comecei as minhas buscas pela solução.

Aí surgiu esta dúvida. Nas receitas que tenho visto é criado um device ttyS15, incluido no grupo uucp, configurado propriedades de leitura e escrita, o driver é compilado, carregado, mas não consegui identificar nessas etapas quando é configurada a porta serial do modem.

Não entendo o porquê dessa porta serial (ttyS15), se no windows o modem aparece na com 4 (ttyS3).

Porquê a diferença?

Até hoje me sinto muito dependente do windows para verificar qual a porta serial do modem.

Afinal, qual a liberdade que temos de definir a porta serial em um modem?"

Nós podemos dividir os modems em quatro tipos. Os Legacy ISA, os mais antigos ainda configurados via jumper, os ISA plug-and-play, os Hardmodems PCI e os softmodems PCI.

Para acessar o modem, o sistema operacional precisa saber de basicamente duas coisas: Qual é a porta serial usada pelo modem e qual é o endereço de IRQ usado por ele.

Nos modems legacy ISA isso era bem previsível, pois você simplesmente configurava os jumpers de acordo com os endereços que queria que o modem utilizasse. Na hora de instalar você simplesmente dizia que tinha um modem na COM2, IRQ 4 por exemplo e ele funcionava. O chato era que de vez em quando o modem entrava em conflito com as portas seriais da placa mãe, mas nada que uma olhada rápida no setup não pudesse resolver :-)

O próximo passo foram os modems ISA plug-and-play. Eles continuam funcionando da mesma forma, mas agora a definição da com e IRQ usada pelo modem é feita pelo BIOS durante o boot. Ele verifica quais endereços estão ocupados pelas portas seriais e outros dispositivos e tenta jogar o modem em endereços livres, evitando conflitos. Estas informações vão para o ESCD, que é uma tabela com todos os dispositivos plug-and-play instalados no PC e seus respectivos endereços que pode ser consultada pelo sistema operacional. Como você não sabe mais com certeza em qual COM e IRQ o modem está disponível, você pode ou deixar o sistema operacional tentar detectá-lo sozinho ou simplesmente ir chutando várias combinações até achar o modem.

Isso não chega a ser muito trabalhoso pois existem apenas quatro possibilidades: COM1, COM2,COM3 e COM4 no Windows e /dev/ttyS0, /dev/ttyS1, /dev/ttyS2 e /dev/ttyS3 no Linux.

Nos hardmodems PCI o esquema se mantém mais ou menos inalterado. A diferença principal é que as quatro primeiras portas seriais são reservadas para dispositivos ISA então o modem será encontrado nas portas COM5, COM6, COM7 ou COM8 no Windows e /dev/ttyI0, /dev/ttyI1, /dev/ttyI2 e /dev/ttyI3 (ou /dev/ttyS4, /dev/ttyS5, /dev/ttyS6 e /dev/ttyS7 que são análogas a estas) no Linux. Muda o endereço mas não muda o procedimento.

O jeito mais fácil para configurar o modem caso ele não seja detectado automaticamente é simplesmente abrir o KPPP e ir chutando o endereço até encontrar o modem, continuam existindo apenas quatro possibilidades.

O endereço /dev/modem é apenas um atalho que vai teoricamente apontar para a localização correta do modem. Algumas distribuições vão dectectar o modem durante a instalação e configurá-lo pra você mas isso nem sempre acontece. Na maioria dos casos você teria que criá-lo manualmente, mas de qualquer forma antes você precisaria saber em qual porta o modem está :-)

Os softmodems já são animais mais complicados. Neles não existe mais uma porta serial, mas apenas um endereço de hardware onde o modem é contatactado. A porta serial é emulada via software, não estamos mais falando de um endereço como "/dev/ttyS5" mas sim de um software que possui um endereço próprio.

O sistema cria um dispositivo apontando para o software como se ele fosse uma porta serial e envia para ele os comandos AT para controlar o modem. O software "traduz" estes comandos para as instruções entendidas pelo modem, além de cuidar de tarefas como correção de erro e controle de fluxo.

Ao instalar os drivers do modem, além do software de controle será criado este dispositivo de comunicação. Ao contrário das portas COM ele não possui um endereço disponível, por ser qualquer coisa. Ao instalar um modem Lucent no Linux por exemplo, o script de instalação cria um dispositivo /dev/ttyLT0 e em seguida o link /dev/modem apontando para ele. Isso torna o acesso ao modem mais ou menos transparente para o usuário, pois ele não vai precisar descobrir aonde o modem está, simplesmente abrir o KPPP e discar. Se o driver instalado for mesmo o correto as dificuldades acabam por aqui.

No Windows o tal software de comunicação é um arquivo .exe instalado em algum lugar no sistema e no Linux ele é um módulo do Kernel carregado durante o boot. Este módulo precisa ser compilado para o Kernel que está instalado no seu sistema, é por isso que um pacote com drivers para o Mandrake 8.2 não funciona no 9.0 por exemplo. Você precisa baixar um pacote feita especialmente para a distribuição que estiver utilizando ou então baixar o arquivo .tar.gz genérico, onde o módulo será compilado na sua máquina durante a instalação.

Em geral o script de instalação cuida de quase tudo. Mas, se você tiver curiosidade em saber o que ele realmente faz, vai ter que descer um pouquinho mais :)

Eu me deparei com este problema quando comecei a incluir drivers para vários softmodems no Kurumin. Eu não podia simplesmente instalar o modem por vias normais, pois era necessário fornecer suporte a mais de um modem ao mesmo tempo. Outro problema era como ativar os modems com o sistema rodando direto do CD, onde não é possível copiar nem deletar arquivos.

Eu cheguei a uma solução um pouco suja mas que funciona. A "instalação" dos modems é feita em duas etapas. A primeira é compilar os módulos e copiá-los para a pasta /lib/modules do sistema, antes de fechar o CD, de modo que eles fiquem disponíveis.

A segunda parte da instalação é feita com o sistema rodando, quando o usuário clica num dos ícones que ativam suporte aos modems. Ao clicar no "Habilitar suporte a PC-Tel Onboard (M810, M812, M817)" são executados basicamente estes comandos:
mknod -m 666 /dev/ttySL0 c 212 0
ln -sf /dev/ttySL0 /dev/modem
insmod slmdm country=BRAZIL
insmod slamrmo

Isto é mais ou menos o que o script de instalação do modem faz. Por isso serve como um bom exemplo para entender o processo de instalação.

A primeira linha, "mknod -m 666 /dev/ttySL0 c 212 0" cria o dispositivo "/dev/ttySL0" que aponta para o endereço do software de controle do modem (c 212 0). O que interessa mesmo neste caso é o "c 212 0", o dispositivo poderia ter qualquer nome, um /dev/bin-laden iria fazer exatamente a mesma coisa.

O "
ln -sf /dev/ttySL0 /dev/modem" é que coloca as coisas no lugar. Agora nós criamos o atalho /dev/modem, apontando para o dispositivo anteriormente criado. Finalmente é carregado o software de controle do modem, representado pelos módulos slmdm e slamrmo.

Todos os scripts de instalação de drivers de softmodems seguem mais ou menos esta seqüência: compilar os módulos (ou instalar módulos já compilados incluídos no pacote), criar o dispositivo do modem apontando para o software de controle, criar o /dev/modem apontando para este dispositivo e, finalmente, carregar os módulos.

Os erros podem surgir em qualquer uma destas etapas mas o mais comum é o usuário tentar instalar um pacote com módulos compilados para uma distribuição diferente da que está usando ou tentar instalar drivers incompatíveis com o modem que está usando.

Outra coisa que acontece muito é o /dev/modem ser criado com permissões "seguras" que não permitem que o seu login de usuário utilize o modem. É o velho problema "modem funciona só como root". Neste caso é só abrir um terminal logado como root e usar o comando:

chmod 666 /dev/modem




Copyright 2003 Carlos E. Morimoto, http://www.guiadohardware.net - Todos os direitos reservados