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.
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.
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:
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:
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.
À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:
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:
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
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
Configuração do Software
tty00 at 0x03f8 (irq = 4) is a 16550A
tty01 at 0x02f8 (irq = 3) is a 16550A
tty02 at 0x03e8 (irq = 4) is a 16550A
# setserial /dev/ttyS2 irq 2
Testes Fundamentais
# minicom -s
# seyon -modems /dev/ttyS2
Lidando com Problemas