Uso de Modems no Linux


[Home] [Dissertação] [Biba] [Linux] [br.ispell] [axw3] [uplink]

Estas notas formam um capítulo à parte da documentação do uplink e estão sendo disponibilizadas de forma independente em parte por causa da quantidade de perguntas referindo problemas com modems que começaram a surgir na lista linusp-gen. Tentou-se aqui usar um estilo de tutorial, mais detalhado do que é o normal nas postagens em listas. Tente por favor localizar aqui a solução para o seu problema antes de fazer postagens. Envie as suas dúvidas, correções e críticas referentes a estas notas para ueda@ime.usp.br.

Conteúdo

Configuração do Hardware

Estas notas cobrem apenas o uso das serias "nativas" do PC, isto é, as assim-chamadas portas COM1-4. No que tange a modems, a "configuração do hardware" normalmente limita-se a configurar qual porta e qual IRQ estão sendo utilizados pelo modem. O modo de se fazer isso varia um pouco dependendo do tipo do modem.

Para o endereço de I/O existem normalmente quatro possibilidades. Esse endereço é o que caracteriza cada "COM", de acordo com a tabela que segue. A cada "COM" corresponde uma entrada do diretório /dev do Linux, através da qual os softwares de comunicação utilizam o modem (ou outros dispositivos que estejam acoplados à serial).

COM Endereço de I/O IRQ default device no Linux
1 0x3f8 4 cua0 ou ttyS0
2 0x2f8 3 cua1 ou ttyS1
3 0x3e8 4 cua2 ou ttyS2
4 0x2e8 3 cua3 ou ttyS3

Para cada COM exite um IRQ default. No caso de modems internos, com grande frequência o IRQ utilizado não é o default. O fato dos IRQs 4 e 3 serem cada um o default para duas COMs diferentes não significa que você possa efetivamente ter duas serias operando simultâneamente no IRQ 4 ou 3. Pelo contrário, isso normalmente é impossível, a não se que se utilizem hardwares especiais.

O modem poderá operar em qualquer endereço de I/O e em qualquer IRQ que estejam disponíveis. A escolha de qual endereço e de qual IRQ utilizar pode caber à pessoa que fez a configuração do hardware, ou pode ser um processo dinâmico que se realiza cada vez que o computador é inicializado. Havendo a necessidade de se escolher explicitamente um IRQ, a tabela que segue poderá ser de alguma ajuda:

IRQ uso
0 timer
1 teclado
2 normalmente disponível
3 COM2, NEs antigas
4 COM1
5 normalmente disponível
6 floppy
7 paralela
8 real-time
9 equivale ao IRQ2
10 normalmente disponível
11 normalmente disponível
12 Mose PS/2
13 floating-point
14 Controladora IDE primária
15 Controladora IDE secundária

Na prática, as escolhas habituais para IRQs normalmente restringem-se ao 2, 3 e 5. Alguns modems conseguem operar também nos IRQs de 10 para cima, neste caso pode-se também optar pelo 10, 11 ou 12.

Modems com dip-switches ou jumpers

Muitos modems internos, principalmente os mais antigos, possuem dip-switches e/ou jumpers através dos quais especificam-se ao hardware em qual endereço de I/O ele deve operar, e qual IRQ ele deve gerar no bus quando a iniciativa do I/O couber a ele.

No caso de se estar instalando um modem desses, o manual do hardware deve ser consultado (às vezes as informações essenciais estão presentes na própria placa do circuito impresso) para se saber a posição correta de cada dip-switch ou jumper a fim de se configurar o modem para operar num endereço/IRQ que se saiba de antemão que não provocará conflito com outros dispositivos.

Por exemplo: a quase totalidade das motherboards mais recentes possuem duas serias nativas, que via de regra operam como COM1 e COM2. A não ser que você as desabilite, não poderá usar qualquer dessas duas para o seu modem, que portanto deverá operar na COM 3 ou 4.

Alguns modems possuem uma determinada configuração de jumpers que os colocam em modo PnP. Ao optar por essa configuração, a pessoa que configurou o modem está transferindo a responsabilidade da escolha do endereço de I/O e o IRQ para a motherboard ou para o sistema operacional. Este caso será tratado no ítem que segue.

Modems PnP-only

Tem sido cada vez mais frequente topar com modems que não oferecem à pessoa que vai configurar o hardware nenhuma opção para predeterminar os valores do endereço de I/O e o IRQ. Nesse caso, a determinação desses valores é feita dinâmicamente ou pela motherboard ou pelo sistema operacional.

As BIOSes relativamente recentes (mais ou menos de 96 para cá) são "compatíveis" com PnP, o que significa que podem tomar a iniciativa de configurar todos os dispositivos PnP que ela encontrar no bus ISA (modems, placas de som, placas de rede, etc), atribuindo a cada um um endereço de I/O, um IRQ, e um ou mais canais de DMA, de acordo com o que cada dispositivo requisitar e com as alternativas que cada um oferece, de forma a não ocorrerem conflitos.

Via de regra esse recurso das motherboards costuma estar desabilitado por default. Para habilitá-lo, é necessário entrar no "setup" do micro e selecionar a opção correspondente, que em geral pode ser encontrada numa seção chamada PnP/PCI ou algo semelhante. Essa costuma ser a forma mais simples de se conseguir fazer com que dispositivos PnP operem corretamente no Linux.

A segunda possibilidade é fazer com que o sistema operacional realize a configuração. O sistema no caso pode ser tanto o windows quanto o Linux. Se se bootar o windows, ele irá configurar todos os dispositivos PnP fazendo a escolha dos endereços, IRQs e DMAs adequados. O windows via de regra realiza esse procedimento de forma correta, não obstante haver casos onde se necessita um ajuste fino manual. Se nesse momento o computador for rebootado sem que se desligue a alimentação, quando se entrar no Linux todos os dispositivos PnP preservarão a configuração feita pelo windows e poderão ser utilizados normalmente.

O próprio Linux, não obstante, pode configurar os dispositivos PnP do bus ISA, inclusive modems internos. O procedimento a ser seguido neste caso consiste em fazer um dump através do pnpdump redirecionando-o para um arquivo, editar esse arquivo e passá-lo como parâmetro ao isapnp. Tanto o pnpdump quanto o isapnp fazem parte do pacote isapnptools disponível em ftp://ftp.demon.co.uk/pub/unix/linux/utils , mas provavelmente presente em todas as versões mais recentes das distribuições do Linux.

A edição do dump equivale a determinar manualmente um endereço de I/O e um IRQ para o modem, pois nesse processo visualizam-se todas as opções que o modem oferece e escolhe-se uma descomentando-a. Portanto para seguir esse procedimento é necessário estar a par de quais recursos já estão alocados ou não. Isso pode incluir alguns recursos inesperados, como um IRQ alocado pela motherboard para uma placa VGA PCI, ou para o mouse PS/2.

Modems externos

O Modem externo costuma ser o mais fácil de se configurar, pois ele será conectado a uma serial que na maior parte dos casos já estará configurada. Como já dissemos acima, as motherboards mais recentes em geral trazem duas seriais onboard. Com frequência uma delas está sendo utilizada pelo mouse, assim resta uma segunda (em geral a COM2), à qual conecta-se o modem.

Pode ocorrer da serial da motherboard estar desabilitada. Isso também não é difícil de resolver, basta habilitá-la no setup do computador (e torcer para isso não provocar um conflito com algum outro dispositivo).

Motherboards mais antigas não trazem seriais onboard. Nesse caso as seriais estão presentes em alguma outra placa, por exemplo uma das antigas super-ide. Aqui procede-se como no caso anterior, exceto pelo detalhe que a eventual habilitação da serial pode requerer a remoção da placa e a reconfiguração dos seus jumpers, operação em que se necessitará do manual do hardware. É de se notar que seriais desse tipo com certa frequência não conseguem operar em velocidades superiores a 19200.

Modems PCI

Esse parágrafo ainda não foi redigido porque eu nunca mexi num modem desses

Meu modem já veio instalado no micro que eu comprei

O seu modem provavelmente é um modem interno PnP. Cheque na documentação do micro e no gerenciador de dispositivos para levantar as informações que estiverem disponíveis, às vezes o nome do driver do windows revela algum detalhe. Em alguns casos pode tratar-se de algum hardware muito particular que requeira componentes adicionais de software para poder funcionar, ou para poder funcionar com todos os recursos. Veja a seção mais adiante sobre os modems RPI, e também o HARDWARE-HOWTO.

Configuração do Software

Convém observar que os configuradores de modems do Linux que rodam automaticamente durante o processo de instalação e/ou nas interfaces de administração das diferentes distribuições, podem eventualmente limitar-se a criar um "link" no /dev especificando em qual porta as aplicações devem procurar por default o modem.

Como faz muito tempo que não tento utilizar nenhum deles, pode ser que isso que acabo de dizer esteja errado, mormente no caso de se estar usando essas interfaces mais recentes (kde, gnome). Não obstante, o fato de se ter "configurado" a serial numa delas pode perfetamente ser apenas um dos passos necessários para que os softwares de comunicação consigam utilizar o modem.

Informando ao kernel o IRQ do modem

Completada a configuração do hardware, basta na verdade confirmar se o Linux detetou ou não a serial, e informar a ele o IRQ em que ela está operando. Esse primeiro passo realiza-se observando as warnings do kernel durante o boot. Elas devem incluir linhas como as que seguem:

tty00 at 0x03f8 (irq = 4) is a 16550A
tty01 at 0x02f8 (irq = 3) is a 16550A
tty02 at 0x03e8 (irq = 4) is a 16550A

Neste caso elas estão informando que foram detetadas 3 seriais: as COMs 1, 2 e 3. Os IRQs indicados não foram detetados, mas são os default. Se não corresponderem à configuração do hardware, terão que ser corrigidos através do comando setserial. Por exemplo:

   # setserial /dev/ttyS2 irq 2

Note que o nome do device (ttyS2) é ligeiramente diferente do nome que consta das warnings do boot. Se não for possível acompanhar as warnings do boot, elas poderão ser vistas através do comando dmesg, além do que elas também constam do arquivo de log do sistema (geralmente /var/log/messages).

Nas softwares do msdos e do windows 3.x era um passo crucial informar ao software a COM que se estava utilizando e o IRQ alocado para ela. No caso do Linux, o IRQ será informado não para a aplicação, mas para o kernel, pois as aplicações farão a comunicação através do kernel. É isso que se faz quando se executa o comando setserial exemplificado acima.

Testes Fundamentais

Àqueles que chegarem aqui... parabéns! agora falta muito pouco. Os testes indicados aqui se restringirão a realizar uma conversação elementar com o modem a fim de confirmar que a comunicação entre o computador e o modem está se processando normalmente.

Testando o modem com o minicom

Do console do Linux ou de um xterm no Xwindows pode-se disparar o minicom. Quando se está realizando testes, convém dispará-lo com privilégios de superusuário e usando a chave -s, a fim de se confirmar qual porta se está utilizando:

    # minicom -s

Feito isso surgirá um pequeno menu onde se pode selecionar "Serial port setup" e, em seguida, "Serial device". Informe aqui exatamente a porta em que você sabe que o seu modem está operando (por exemplo /dev/ttyS2), saia desse menu com ESC e selecione em seguida "Exit". Após um instante deverá ser exibida a string de inicialização seguida por um OK. Se isso demorar mais do que um instante e/ou se a string de inicialização for sendo exibida aos poucos, provavelmente o IRQ não está corretamente configurado.

Poderá agora ser realizado um diálogo de testes com o modem dando-se comandos como AT, ATZ, discagens, etc. Normalmente pode-se utilizar maiúsculas ou minúsculas para se entrar os comandos, não obstante alguns modems não suportam que se misture maiúsculas com minúsculas, como em At. Normalemente é possível sair do minicom com a sequência Alt-Z Q.

Testando o modem com o seyon

O seyon é uma aplicação para Xwindows. Para utilizá-lo para testes iniciais, do prompt de um xterm execute o seguinte comando:

    # seyon -modems /dev/ttyS2

Trocando o ttyS2 pela porta para a qual o modem estiver configurado. Em seguida poderão ser realizados os mesmos testes dialogais indicados no parágrafo sobre o minicom.

Testes de loopback

Esse parágrafo ainda está sendo redigido

Lidando com Problemas

Essa seção ainda está sendo redigida

Qualidade das seriais onboard

Modems RPI

As interrupções e os overruns

Informações básicas sobre controle de fluxo

A polêmica da classe 1

Controle de fluxo nos USRs em v.17

Recuperando o modo de comandos através do DTR

Realizando testes sem utilizar linhas telefônicas

Procedimentos habituais para testes do handshake e de estabilidade

Datasheets disponíveis na Internet

Outras fontes de informação