Capítulo 26. Comunicações Seriais

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD.

26.1. Sinopse

O UNIX™ sempre teve suporte para comunicação serial, pois as primeiras máquinas UNIX™ dependiam de linhas seriais para entrada e saída do usuário. As coisas mudaram muito desde os dias em que o terminal médio consistia de uma impressora serial de 10 caracteres por segundo e um teclado. Este capítulo aborda algumas das maneiras pelas quais as comunicações seriais podem ser usadas no FreeBSD.

Depois de ler este capítulo, você saberá:

  • Como conectar terminais a um sistema FreeBSD.

  • Como usar um modem para discar para hosts remotos.

  • Como permitir que usuários remotos efetuem login em um sistema FreeBSD com um modem.

  • Como inicializar um sistema FreeBSD a partir de uma console serial.

Antes de ler este capítulo, você deve:

26.2. Terminologia serial e hardware

Os termos a seguir são frequentemente usados em comunicações seriais:

bps

Bits por Segundo (bps) é a taxa na qual os dados são transmitidos.

DTE

Equipamento Terminal de Dados (DTE) é um dos dois terminais em uma comunicação serial. Um exemplo seria um computador.

DCE

Equipamento de Comunicações de Dados (DTE) é o outro terminal em uma comunicação serial. Normalmente, é um modem ou terminal serial.

RS-232

O padrão original que definiu as comunicações seriais de hardware. Desde então, foi renomeado para TIA-232.

Ao se referir a taxas de dados de comunicação, esta seção não usa o termo baud. Baud refere-se ao número de transições de estado elétrico feitas em um período de tempo, enquanto bps é o termo correto a ser usado.

Para conectar um terminal serial a um sistema FreeBSD, são necessárias uma porta serial no computador e o cabo adequado para conectar ao dispositivo serial. Os usuários que já estão familiarizados com hardware serial e cabeamento podem pular esta seção com segurança.

26.2.1. Cabos Serial e Portas

Existem vários tipos diferentes de cabos seriais. Os dois tipos mais comuns são cabo null-modem e cabo padrão RS-232. A documentação do hardware deve descrever o tipo de cabo necessário.

Estes dois tipos de cabos diferem em como os fios são conectados ao conector. Cada fio representa um sinal, com os sinais definidos resumidos em RS-232C Nomes dos Sinais. Um cabo serial padrão passa todos os sinais RS-232C diretamente. Por exemplo, o pino "Transmitted Data" em uma extremidade do cabo vai para o pino "Transmitted Data" na outra extremidade. Este é o tipo de cabo usado para conectar um modem ao sistema FreeBSD e também é apropriado para alguns terminais.

Um cabo de modem nulo alterna o pino "Transmitted Data" do conector em uma extremidade com o pino "Received Data" na outra extremidade. O conector pode ser um DB-25 ou um DB-9.

Um cabo de modem nulo pode ser construído usando as conexões de pinos resumidas em Cabo Null-Modem DB-25 para DB-25, Cabo DB-9 para DB-9 Null-Modem e Cabo DB-9 para DB-25 Null-Modem. Enquanto o padrão exige um pino direto 1 para fixar uma linha "Protective Ground", ele é freqüentemente omitido. Alguns terminais funcionam usando apenas os pinos 2, 3 e 7, enquanto outros exigem configurações diferentes. Em caso de dúvida, consulte a documentação do hardware.

Tabela 1. RS-232C Nomes dos Sinais
SiglasNomes

RD

Received Data

TD

Transmitted Data

DTR

Data Terminal Ready

DSR

Data Set Ready

DCD

Data Carrier Detect

SG

Signal Ground

RTS

Request to Send

CTS

Clear to Send

Tabela 2. Cabo Null-Modem DB-25 para DB-25
SinalPin #Pin #Sinal

SG

7

conecta-se a

7

SG

TD

2

conecta-se a

3

RD

RD

3

conecta-se a

2

TD

RTS

4

conecta-se a

5

CTS

CTS

5

conecta-se a

4

RTS

DTR

20

conecta-se a

6

DSR

DTR

20

conecta-se a

8

DCD

DSR

6

conecta-se a

20

DTR

DCD

8

conecta-se a

20

DTR

Tabela 3. Cabo DB-9 para DB-9 Null-Modem
SinalPin #Pin #Sinal

RD

2

conecta-se a

3

TD

TD

3

conecta-se a

2

RD

DTR

4

conecta-se a

6

DSR

DTR

4

conecta-se a

1

DCD

SG

5

conecta-se a

5

SG

DSR

6

conecta-se a

4

DTR

DCD

1

conecta-se a

4

DTR

RTS

7

conecta-se a

8

CTS

CTS

8

conecta-se a

7

RTS

Tabela 4. Cabo DB-9 para DB-25 Null-Modem
SinalPin #Pin #Sinal

RD

2

conecta-se a

2

TD

TD

3

conecta-se a

3

RD

DTR

4

conecta-se a

6

DSR

DTR

4

conecta-se a

8

DCD

SG

5

conecta-se a

7

SG

DSR

6

conecta-se a

20

DTR

DCD

1

conecta-se a

20

DTR

RTS

7

conecta-se a

5

CTS

CTS

8

conecta-se a

4

RTS

Quando um pino em uma extremidade se conecta a um par de pinos na outra extremidade, geralmente é implementado com um fio curto entre o par de pinos em seu conector e um fio longo no outro pino único.

As portas seriais são os dispositivos através dos quais os dados são transferidos entre o computador host do FreeBSD e o terminal. Vários tipos de portas seriais existem. Antes de comprar ou construir um cabo, verifique se ele irá se encaixar nas portas do terminal e no sistema FreeBSD.

A maioria dos terminais tem portas DB-25. Os computadores pessoais podem ter portas DB-25 ou DB-9. Um cartão serial multiportas pode ter portas RJ-12 ou RJ-45/. Consulte a documentação que acompanha o hardware para especificações sobre o tipo de porta ou verifique visualmente o tipo de porta.

No FreeBSD, cada porta serial é acessada através de uma entrada em /dev. Existem dois tipos diferentes de entradas:

  • As portas de chamada são nomeadas /dev/ttyuN onde N é o número da porta, começando do zero. Se um terminal estiver conectado a primeira porta serial (COM1), use /dev/ttyu0 para se referir ao terminal. Se o terminal estiver na segunda porta serial (COM2), use /dev/ttyu1 e assim por diante. Geralmente, a porta de chamada é usada para terminais. As portas de chamada requerem que a linha serial declare o sinal "Data Carrier Detect" para funcionar corretamente.

  • As portas de chamadas de saida são nomeadas /dev/cuauN nas versões 8.X e superiores do FreeBSD e /dev/cuadN nas versões 7.X e inferiores do FreeBSD. As portas de chamada de saida geralmente não são usadas para terminais, mas são usadas para modems. A porta de evocação pode ser usada se o cabo serial ou o terminal não suportar o sinal "Data Carrier Detect".

O FreeBSD também fornece dispositivos de inicialização (/dev/ttyuN.init e /dev/cuauN.init ou /dev/cuadN.init) e dispositivos de bloqueio (/dev/ttyuN.lock e /dev/cuauN.lock ou /dev/cuadN.lock). Os dispositivos de inicialização são utilizados para inicializar os parâmetros da porta de comunicações de cada vez que uma porta é aberta, tal como o crtscts para modems que usam RTS/CTS sinalização para controle de fluxo. Os dispositivos de bloqueio são usados para bloquear sinalizadores nas portas para impedir que usuários ou programas alterem determinados parâmetros. Consulte termios(4), sio(4), e stty(1) para obter informações sobre configurações de terminal, bloqueio e inicialização de dispositivos e configuração de opções de terminal, respectivamente.

26.2.2. Configuração de Porta Serial

Por padrão, o FreeBSD suporta quatro portas seriais que são comumente conhecidas como COM1, COM2, COM3 e COM4. O FreeBSD também suporta placas de interfaces seriais multi-port, como o BocaBoard 1008 e 2016, bem como placas multi-port mais inteligentes, como as feitas pela Digiboard. No entanto, o kernel padrão procura apenas as portas padrão COM.

Para ver se o sistema reconhece as portas seriais, procure por mensagens de inicialização do sistema que começam com uart:

# grep uart /var/run/dmesg.boot

Se o sistema não reconhecer todas as portas seriais necessárias, entradas adicionais podem ser adicionadas ao /boot/device.hints. Este arquivo já contém entradas hint.uart.0.* para entradas COM1 e hint.uart.1.* para COM2. Ao adicionar uma entrada de porta para COM3 use 0x3E8 e para COM4 use 0x2E8. Endereços comuns de IRQ são 5 para COM3 e 9 para COM4.

Para determinar o conjunto padrão de configurações de terminal E/S usadas pela porta, especifique o nome do dispositivo. Este exemplo determina as configurações para a porta de chamada em COM2:

# stty -a -f /dev/ttyu1

A inicialização de dispositivos seriais em todo o sistema é controlada por /etc/rc.d/serial. Este arquivo afeta as configurações padrão dos dispositivos seriais. Para alterar as configurações de um dispositivo, use stty. Por padrão, as configurações alteradas estão em vigor até que o dispositivo seja fechado e, quando o dispositivo for reaberto, volte para o conjunto padrão. Para alterar permanentemente o conjunto padrão, abra e ajuste as configurações do dispositivo de inicialização. Por exemplo, para ativar o modo CLOCAL, comunicação de 8 bits e controle de fluxo XON/XOFF para ttyu5, digite:

# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff

Para impedir que determinadas configurações sejam alteradas por um aplicativo, faça ajustes no dispositivo de bloqueio. Por exemplo, para bloquear a velocidade de ttyu5 para 57600 bps, digite:

# stty -f /dev/ttyu5.lock 57600

Agora, qualquer aplicativo que abra ttyu5 e tente alterar a velocidade da porta será bloqueado com 57600 bps.

26.3. Terminais

Os terminais fornecem uma maneira conveniente e barata de acessar um sistema FreeBSD quando não estão no console do computador ou em uma rede conectada. Esta seção descreve como usar terminais com o FreeBSD.

Os sistemas originais UNIX™ não tinham consoles. Em vez disso, os usuários efetuaram login e executaram programas por meio de terminais conectados as portas seriais do computador.

A capacidade de estabelecer uma sessão de login em uma porta serial ainda existe em quase todos os sistemas operacionais do tipo UNIX™ hoje, incluindo o FreeBSD. Usando um terminal conectado a uma porta serial não usada, um usuário pode efetuar login e executar qualquer programa de texto que possa ser executado normalmente no console ou em uma janela xterm.

Muitos terminais podem ser conectados a um sistema FreeBSD. Um computador sobressalente mais antigo pode ser usado como um terminal conectado a um computador mais potente executando o FreeBSD. Isso pode transformar o que poderia ser um computador de usuário único em um poderoso sistema de múltiplos usuários.

O FreeBSD suporta três tipos de terminais:

Terminais Burros

Terminais burro são um hardware especializado que se conecta a computadores através de linhas seriais. Eles são chamados de "dumb" porque eles possuem apenas poder computacional suficiente para exibir, enviar e receber texto. Nenhum programa pode ser executado nesses dispositivos. Em vez disso, os terminais burros se conectam a um computador que executa os programas necessários.

Existem centenas de tipos de terminais burro feitos por muitos fabricantes, e praticamente qualquer tipo funciona com o FreeBSD. Alguns terminais high-end podem até exibir gráficos, mas apenas determinados pacotes de software podem aproveitar esses recursos avançados.

Terminais burro são populares em ambientes de trabalho onde os trabalhadores não precisam de acesso a aplicativos gráficos.

Computadores Atuando como Terminais

Como um terminal burro tem capacidade suficiente para exibir, enviar e receber texto, qualquer computador de reserva pode ser um terminal burro. Tudo o que é necessário é o cabo adequado e algum software de terminal emulation para ser executado no computador.

Esta configuração pode ser útil. Por exemplo, se um usuário está ocupado trabalhando no console do sistema FreeBSD, outro usuário pode fazer algum trabalho somente de texto ao mesmo tempo de um computador pessoal menos potente ligado como um terminal ao sistema FreeBSD.

Existem pelo menos dois utilitários no sistema base do FreeBSD que podem ser usados para trabalhar através de uma conexão serial: cu(1) e tip(1).

Por exemplo, para conectar-se de um sistema cliente que executa o FreeBSD para a conexão serial de outro sistema:

# cu -l /dev/cuauN

Portas são numeradas a partir de zero. Isso significa que COM1 é /dev/cuau0.

Programas adicionais estão disponíveis através da coleção de ports, como comms/minicom.

Terminais X

Os terminais X são o tipo de terminal mais sofisticado disponível. Em vez de se conectar a uma porta serial, eles geralmente se conectam a uma rede como a Ethernet. Em vez de serem relegados a aplicativos somente de texto, eles podem exibir qualquer aplicativo Xorg.

Este capítulo não cobre a configuração ou uso de terminais X.

26.3.1. Configuração do Terminal

Esta seção descreve como configurar um sistema FreeBSD para ativar uma sessão de login em um terminal serial. Assume-se que o sistema reconhece a porta serial a qual o terminal está conectado e que o terminal está conectado com o cabo correto.

No FreeBSD, o init lê o /etc/ttys e inicia um processo getty nos terminais disponíveis. O processo getty é responsável por ler um nome de login e iniciar o programa login. As portas no sistema FreeBSD que permitem logins estão listadas em /etc/ttys. Por exemplo, o primeiro console virtual, ttyv0, possui uma entrada nesse arquivo, permitindo logins no console. Este arquivo também contém entradas para os outros consoles virtuais, portas seriais e pseudo-ttys. Para um terminal com fio, a entrada /dev da porta serial é listada sem a parte /dev. Por exemplo, /dev/ttyv0 está listado como ttyv0.

Por padrão o /etc/ttys configura o suporte para as quatro primeiras portas seriais, ttyu0 até ttyu3:

ttyu0   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu1   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu2   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu3   "/usr/libexec/getty std.9600"   dialup  off secure

Ao conectar um terminal a uma destas portas, modifique a entrada padrão para definir a velocidade e o tipo de terminal necessários, para ligar o dispositivo on e, se necessário, para alterar o secure da porta. Se o terminal estiver conectado a outra porta, adicione uma entrada para a porta.

Configurando Entradas de Terminal configura dois terminais em /etc/ttys. A primeira entrada configura um Wyse-50 conectado ao COM2. A segunda entrada configura um computador antigo executando o software do terminal Procomm emulando um terminal VT-100. O computador está conectado à sexta porta serial em uma placa serial com várias portas.

Exemplo 1. Configurando Entradas de Terminal
ttyu1  "/usr/libexec/getty std.38400"  wy50  on  insecure
ttyu5   "/usr/libexec/getty std.19200"  vt100  on insecure
  • O primeiro campo especifica o nome do dispositivo do terminal serial.

  • O segundo campo informa ao getty para inicializar e abrir a linha, definir a velocidade da linha, solicitar um nome de usuário e, em seguida, executar o programa login. O tipo de getty type configura características na linha do terminal, como taxa e paridade bps. Os tipos de getty disponíveis estão listados em /etc/gettytab. Em quase todos os casos, os tipos de getty que começam com std funcionarão para terminais conectados, já que essas entradas ignoram a paridade. Há uma entrada std para cada taxa de bps de 110 a 115200. Consulte gettytab(5) para mais informações.Ao definir o tipo de getty, certifique-se de coincidir com as configurações de comunicação usadas pelo terminal. Para este exemplo, o Wyse-50 não usa paridade e se conecta a 38400 bps. O computador não usa paridade e se conecta a 19200 bps.

  • O terceiro campo é o tipo de terminal. Para portas dial-up, unknown ou dialup é normalmente usado, pois os usuários podem discar praticamente com qualquer tipo de terminal ou software. Como o tipo de terminal não muda para terminais com fio, um tipo de terminal real de /etc/termcap pode ser especificado. Para este exemplo, o Wyse-50 usa o tipo de terminal real enquanto o computador executando o Procomm está configurado para emular um VT-100.

  • O quarto campo especifica se a porta deve estar ativada. Para ativar logins nessa porta, este campo deve ser definido como on.

  • O campo final é usado para especificar se a porta é segura. Marcar uma porta como secure significa que ela é confiável o suficiente para permitir que root faça login a partir dessa porta. As portas inseguras não permitem logins root. Em uma porta insegura, os usuários devem efetuar login de contas não privilegiadas e, em seguida, usar o su ou um mecanismo semelhante para obter privilégios de superusuário, conforme descrito em A conta de superusuário. Por razões de segurança, recomenda-se alterar esta configuração para insecure.

Depois de fazer qualquer alteração em /etc/ttys, envie um sinal SIGHUP (hangup) para o processo init para forçá-lo a reler seu arquivo de configuração:

# kill -HUP 1

Como o init é sempre o primeiro processo executado em um sistema, ele sempre tem um processo ID de 1.

Se tudo estiver configurado corretamente, todos os cabos estiverem no lugar e os terminais ligados, um processo getty deverá estar em execução em cada terminal e as solicitações de login deverão estar disponíveis em cada terminal.

26.3.2. Solução de Problemas da Conexão

Mesmo com a mais meticulosa atenção aos detalhes, algo poderia dar errado ao configurar um terminal. Aqui está uma lista de sintomas comuns e algumas correções sugeridas.

Se nenhum prompt de login aparecer, verifique se o terminal está conectado e ligado. Se for um computador pessoal atuando como um terminal, verifique se ele está executando o software de emulação de terminal na porta serial correta.

Certifique-se de que o cabo esteja conectado firmemente ao terminal e ao computador do FreeBSD. Certifique-se de que é o tipo certo de cabo.

Certifique-se de que o terminal e o FreeBSD concordem com as configurações de taxa e paridade de bps. Para um terminal de exibição de vídeo, verifique se os controles de contraste e brilho estão ativados. Se for um terminal de impressão, verifique se o papel e a tinta estão em bom estado.

Use ps para certificar-se de que um processo getty esteja em execução e atendendo ao terminal. Por exemplo, a listagem a seguir mostra que um getty está sendo executado na segunda porta serial, ttyu1, e está usando a entrada std.38400 em /etc/gettytab:

# ps -axww|grep ttyu
22189  d1  Is+    0:00.03 /usr/libexec/getty std.38400 ttyu1

Se nenhum processo getty estiver em execução, certifique-se de que a porta esteja ativada em /etc/ttys. Lembre-se de executar kill -HUP 1 após modificar /etc/ttys.

Se o processo getty estiver em execução, mas o terminal ainda não exibir um prompt de login ou se exibir um prompt, mas não aceitar entrada digitada, o terminal ou cabo poderá não suportar handshaking de hardware. Tente alterar a entrada em /etc/ttys de std.38400 para 3wire.38400 e, em seguida, execute kill -HUP 1 depois de modificar o /etc/ttys. A entrada 3wire é semelhante a std, mas ignora handshaking de hardware. Pode ser necessário reduzir a taxa de transmissão ou ativar o controle de fluxo de software ao usar 3wire para evitar buffer overflows.

Se aparecer lixo em vez de um prompt de login, certifique-se de que o terminal e o FreeBSD concordem com as configurações de taxa e paridade de bps. Verifique os processos getty para certificar-se de que o tipo correto getty esteja em uso. Se não, edite /etc/ttys e execute kill -HUP 1.

Se os caracteres aparecerem duplicados e a senha aparecer quando digitada, alterne o terminal ou o software de emulação de terminal de "half duplex" ou "local echo" para "full duplex."

26.4. Serviço Dial-in

Configurar um sistema FreeBSD para serviço de discagem é semelhante a configurar terminais, exceto que os modens são usados em vez de dispositivos terminais. O FreeBSD suporta modens externos e internos.

Os modems externos são mais convenientes, pois geralmente podem ser configurados por meio de parâmetros armazenados em RAM não voláteis e geralmente fornecem indicadores luminosos que exibem o estado dos sinais RS-232 importantes, indicando se o modem está funcionando corretamente.

Normalmente, os modems internos não possuem RAM não volátil, portanto, sua configuração pode ser limitada à configuração de switches DIP. Se o modem interno tiver luzes indicadoras de sinal, elas serão difíceis de visualizar quando a tampa do sistema estiver no lugar.

Ao usar um modem externo, é necessário um cabo adequado. Um cabo serial padrão de RS-232C deve ser suficiente.

O FreeBSD precisa dos sinais RTS e CTS para controle de fluxo em velocidades acima de 2400 bps, o sinal CD para detectar quando uma chamada foi atendida ou a linha foi desligada e o sinal DTR para redefinir o modem após a conclusão de uma sessão. Alguns cabos são conectados sem todos os sinais necessários, portanto, se uma sessão de login não desaparecer quando a linha for desligada, pode haver um problema com o cabo. Consulte Cabos Serial e Portas para mais informações sobre esses sinais.

Como outros sistemas operacionais similares ao UNIX™-like, o FreeBSD usa os sinais de hardware para descobrir quando uma chamada foi atendida ou uma linha foi desconectada e para desligar e reinicializar o modem após uma chamada. O FreeBSD evita enviar comandos para o modem ou observar relatórios de status do modem.

O FreeBSD suporta interfaces de comunicação NS8250, NS16450, NS16550 e NS16550A baseado em RS-232C (CCITT V.24). Os dispositivos 8250 e 16450 possuem buffers de caractere único. O dispositivo 16550 fornece um buffer de 16 caracteres, o que permite um melhor desempenho do sistema. Bugs em dispositivos simples 16550 impedem o uso do buffer de 16 caracteres, portanto, use dispositivos 16550A, se possível. Como os dispositivos de buffer de caractere único requerem mais trabalho pelo sistema operacional do que os dispositivos de buffer de 16 caracteres, as placas de interface serial baseadas no 16550A são preferidas. Se o sistema tiver muitas portas seriais ativas ou tiver uma carga pesada, as placas baseadas em 16550A são melhores para comunicações com baixa taxa de erro.

O restante desta seção demonstra como configurar um modem para receber conexões de entrada, como se comunicar com o modem e oferece algumas dicas de solução de problemas.

26.4.1. Configuração de Modem

Como nos terminais, o init gera um processo getty para cada porta serial configurada usada para conexões de dial-in. Quando um usuário disca a linha do modem e os modems se conectam, o sinal "Carrier Detect" é informado pelo modem. O kernel percebe que a portadora foi detectada e instrui o getty a abrir a porta e exibir um prompt login: na velocidade da linha inicial especificada. Em uma configuração típica, se caracteres de lixo forem recebidos, geralmente devido à velocidade de conexão do modem ser diferente da velocidade configurada, o getty tenta ajustar as velocidades de linha até receber caracteres razoáveis. Depois que o usuário digita seu nome de login, o getty executa o login, que conclui o processo de login solicitando a senha do usuário e iniciando o shell do usuário.

Existem duas escolas de pensamento sobre modems dial-up. Um método de configuração é definir os modems e sistemas de modo que, independentemente da velocidade em que um usuário remoto disca, a interface de discagem RS-232 seja executada em uma velocidade travada. O benefício dessa configuração é que o usuário remoto sempre vê um prompt de login do sistema imediatamente. A desvantagem é que o sistema não sabe qual é a verdadeira taxa de dados do usuário, portanto, programas em tela cheia como o Emacs não ajustam seus métodos de tela para melhorar a resposta para conexões mais lentas.

O segundo método é configurar a interface RS-232 para variar sua velocidade com base na velocidade de conexão do usuário remoto. Como o getty não compreende o relatório de velocidade de conexão de nenhum modem em particular, ele fornece uma mensagem login: em uma velocidade inicial e observa os caracteres que retornam em resposta. Se o usuário vê lixo, eles devem pressionar Enter até que um prompt reconhecível seja exibido. Se as taxas de dados não corresponderem, getty verá qualquer coisa que o usuário digita como lixo, e tentará a próxima velocidade e informará novamente o prompt login:. Esse procedimento normalmente leva apenas um pressionamento de tecla ou dois antes que o usuário veja um bom prompt. Essa seqüência de login não parece tão limpa quanto o método de velocidade travada, mas um usuário em uma conexão de baixa velocidade deve receber uma melhor resposta interativa de programas em tela cheia.

Ao travar a taxa de comunicação de dados de um modem a uma velocidade específica, nenhuma alteração em /etc/gettytab deve ser necessária. No entanto, para uma configuração de velocidade compatível, entradas adicionais podem ser necessárias para definir as velocidades a serem usadas para o modem. Este exemplo configura um modem de 14,4 Kbps com uma velocidade de interface superior de 19,2 Kbps usando conexões de 8 bits sem paridade. Ele configura o getty para iniciar a taxa de comunicação para uma conexão V.32bis a 19,2 Kbps, passando por 9600 bps, 2400 bps, 1200 bps, 300 bps e de volta para 19,2 Kbps. O ciclo de taxa de comunicação é implementado com o recurso nx= (proxima tabela). Cada linha usa uma entrada tc= (continuação de tabela) para selecionar o restante das configurações para uma taxa de dados específica.

#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
        :nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
        :nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
        :nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
        :nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
        :nx=V9600:tc=std.19200:

Para um modem de 28,8 Kbps ou para aproveitar a compactação em um modem de 14,4 Kbps, use uma taxa de comunicação mais alta, conforme mostrado neste exemplo:

#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
        :nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
        :nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
        :nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
        :nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
        :nx=VH9600:tc=std.57600:

Para uma CPU lenta ou um sistema altamente carregado sem portas seriais baseadas no 16550A, esta configuração pode produzir erros sio "silo" a 57,6 Kbps.

A configuração do /etc/ttys é similar a Configurando Entradas de Terminal, mas um argumento diferente é passado para o getty e dialup é usado para o tipo de terminal. Substitua xxx pelo processo init que será executado no dispositivo:

ttyu0   "/usr/libexec/getty xxx"   dialup on

O tipo de terminal dialup pode ser alterado. Por exemplo, definir vt102 como o tipo de terminal padrão permite que os usuários usem a emulação VT102 em seus sistemas remotos.

Para uma configuração de velocidade travada, especifique a velocidade com um tipo válido listado em /etc/gettytab. Este exemplo é para um modem cuja velocidade de porta está travada em 19,2 Kbps:

ttyu0   "/usr/libexec/getty std.19200"   dialup on

Em uma configuração de velocidade correspondente, a entrada precisa referenciar a entrada inicial apropriada "auto-baud" em /etc/gettytab. Para continuar o exemplo de um modem com velocidade correspondente que começa em 19,2 Kbps, use esta entrada:

ttyu0   "/usr/libexec/getty V19200"   dialup on

Depois de editar o /etc/ttys, espere até que o modem esteja devidamente configurado e conectado antes de sinalizar o init:

# kill -HUP 1

Modems de alta velocidade, como os modems V.32, V.32bis e V.34, usam hardware (RTS/CTS) para controle de fluxo. Use o stty para definir a flag de controle de fluxo de hardware para a porta do modem. Este exemplo define a flag crtscts na inicialização dos dispositivos COM2 de dial-in e de dial-out:

# stty -f /dev/ttyu1.init crtscts
# stty -f /dev/cuau1.init crtscts

26.4.2. Solução de problemas

Esta seção fornece algumas dicas para solucionar problemas de um modem dial-up que não se conecta há um sistema FreeBSD.

Conecte o modem ao sistema FreeBSD e inicialize o sistema. Se o modem tiver luzes de indicação de status, observe se o indicador DTR do modem acende quando o prompt login: é exibido no console do sistema. Se acender, isso deve significar que o FreeBSD iniciou um processo getty na porta de comunicação apropriada e está aguardando o modem aceitar uma chamada.

Se o indicador DTR não acender, faça o login no sistema FreeBSD através do console e digite ps ax para ver se o FreeBSD está executando um processo getty na porta correta:

114 ??  I      0:00.10 /usr/libexec/getty V19200`ttyu0`

Se a segunda coluna contiver um d0 em vez de um ?? e o modem ainda não aceitou uma chamada, isso significa que o getty completou sua chamada na porta de comunicações. Isso pode indicar um problema com o cabeamento ou com um modem configurado incorretamente porque o getty não deve conseguir abrir a porta de comunicação até que o sinal de detecção da portadora tenha sido declarado pelo modem.

Se nenhum processo getty estiver aguardando para abrir a porta, verifique se a entrada da porta está correta no /etc/ttys. Além disso, verifique o /var/log/messages para ver se há alguma mensagem de log do init ou do getty.

Em seguida, tente discar para o sistema. Certifique-se de usar 8 bits, sem paridade e 1 bit de stop no sistema remoto. Se um prompt não aparecer imediatamente ou o prompt mostrar lixo, tente pressionar Enter uma vez por segundo durante alguns segundos. Se ainda não houver nenhum prompt de login:, tente enviar um BREAK. Ao usar um modem de alta velocidade, tente discar novamente após travar a velocidade da interface do modem de discagem.

Se ainda não houver o prompt login:, verifique novamente o /etc/gettytab e faça um double-check:

  • O nome do recurso inicial especificado na entrada em /etc/ttys corresponde ao nome de um recurso em /etc/gettytab.

  • Cada entrada nx= corresponde a outro nome de recurso gettytab.

  • Cada entrada tc= corresponde a outro nome de recurso gettytab.

Se o modem no sistema FreeBSD não responder, verifique se o modem está configurado para atender o telefone quando o DTR é ativado. Se o modem parece estar configurado corretamente, verifique se a linha DTR é ativada, verificando as luzes indicadoras do modem.

Se ainda assim não funcionar, tente enviar um e-mail para a lista de discussão de perguntas gerais do FreeBSD descrevendo o modem e o problema.

26.5. Serviço de Dial-in

A seguir, dicas para fazer com que o host conecte-se através do modem a outro computador. Isto é apropriado para estabelecer uma sessão de terminal com um host remoto.

Esse tipo de conexão pode ser útil para obter um arquivo na Internet, caso haja problemas no uso do PPP. Se o PPP não estiver funcionando, use a sessão do terminal para enviar por FTP o arquivo necessário. Em seguida, use o zmodem para transferi-lo para a máquina.

26.5.1. Usando um Modem Stock Hayes

Um dialer Hayes genérico está incorporado no tip. Use at=hayes em /etc/remote.

O driver Hayes não é inteligente o suficiente para reconhecer alguns dos recursos avançados de mensagens de modems mais recentes como BUSY, NO DIALTONE ou CONNECT 115200. Desative essas mensagens ao usar o tip com o ATX0&W.

O tempo limite de discagem para o tip é de 60 segundos. O modem deve usar algo menor, ou então o tip irá achar que existe um problema de comunicação. Tente usar ATS7=45&W.

26.5.2. Usando comandos AT

Crie uma entrada "direct" em /etc/remote. Por exemplo, se o modem estiver conectado à primeira porta serial, /dev/cuau0, use a seguinte linha:

cuau0:dv=/dev/cuau0:br#19200:pa=none

Use a taxa mais alta de bps que o modem suporta no recurso br. Em seguida, digite tip cuau0 para conectar-se ao modem.

Ou use cu como root com o seguinte comando:

# cu -lline -sspeed

line é a porta serial, tal como /dev/cuau0, e speed é a velocidade, tal como 57600 . Quando terminar de digitar os comandos AT, digite ~. para sair.

26.5.3. O Sinal @ Não Funciona

O @ na capability do número de telefone diz ao tip para procurar em /etc/phones um número de telefone. Mas, o sinal. @ também é um caractere especial em arquivos de capablity como o /etc/remote, então ele precisa ser escapado com uma barra invertida:

pn=\@

26.5.4. Discando a Partir da Linha de Comando

Coloque uma entrada "genérica" em /etc/remote. Por exemplo:

tip115200|Dial any phone number at 115200 bps:\
        :dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
        :dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:

Isto deve funcionar agora:

# tip -115200 5551234

Usuários que preferem comando cu ao tip, podem usar uma entrada cu genérica:

cu115200|Use cu to dial any number at 115200bps:\
        :dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:

e digite:

# cu 5551234 -s 115200

26.5.5. Definindo a Taxa de bps

Coloque uma entrada para tip1200 ou cu1200, mas vá em frente e use qualquer taxa bps apropriada com o capability br. O tip acha que um bom padrão é de 1200 bps, e é por isso que ele procura por uma entrada tip1200. No entanto, 1200 bps não precisa ser usado.

26.5.6. Acessando um Conjunto de Hosts por Meio de um Servidor de Terminal

Em vez de esperar até conectar-se e digitar CONNECT_host_ a cada vez, use o recurso cm do tip. Por exemplo, estas entradas no /etc/remote permitirão que você digite tip pain ou tip muffin para conectar-se aos hosts pain ou muffin e tip deep13 para conectar ao servidor de terminal.

pain|pain.deep13.com|Forrester's machine:\
        :cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
        :cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
        :dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:

26.5.7. Usando Mais de Uma Linha com tip

Isto geralmente é um problema em que uma universidade tem várias linhas de modems e vários milhares de estudantes tentando usá-las.

Faça uma entrada em /etc/remote e use @ para o recurso pn:

big-university:\
        :pn=\@:tc=dialout
dialout:\
        :dv=/dev/cuau3:br#9600:at=courier:du:pa=none:

Em seguida, liste os números de telefone em /etc/phones:

big-university 5551111
big-university 5551112
big-university 5551113
big-university 5551114

O tip tentará cada número na ordem listada, depois desistirá. Para continuar tentando, execute o tip em um loop while.

26.5.8. Usando o Caractere de Force

O Ctrl+P é o caracter "force" padrão, usado para dizer ao tip que o próximo caractere é um dado literal. O caractere force pode ser definido para qualquer outro caractere com o escape ~s, o que significa "definir uma variável."

Digite ~sforce=single-char seguido por uma nova linha. Onde single-char é qualquer caractere único. Se o single-char for omitido, o caractere force será o caractere nulo, que é acessado digitando-se Ctrl+2 ou Ctrl+Espace. Um valor muito bom para single-char é o Shift+Ctrl+6, que é usado apenas em alguns servidores de terminal.

Para alterar o caractere force, especifique o seguinte em ~/.tiprc:

force=single-char

26.5.9. Caracteres Maiúsculos

Isso acontece quando o Ctrl+A é pressionado, o qual corresponde ao tip "raise character", especialmente concebido para pessoas coma tecla de caps-lock quebrada. Use ~s para definir raisechar para algo razoável. Ele pode ser configurado para ser o mesmo que o caractere de force, se nenhum recurso for usado.

Aqui está um exemplo do ~/.tiprc para os usuários do Emacs que precisam digitar Ctrl+2 e Ctrl+A:

force=^^
raisechar=^^

O ^^ é Shift+Ctrl+6.

26.5.10. Transferências de Arquivos com tip

Ao falar com outro sistema operacional semelhante ao UNIX™, os arquivos podem ser enviados e recebidos usando ~p (put) e ~t (take). Esses comandos executam cat e echo no sistema remoto para aceitar e enviar arquivos. A sintaxe é:

~p local-file [ remote-file ]

~t remote-file [ local-file ]

Não há verificação de erros, então outro protocolo, como zmodem, provavelmente deveria ser usado.

26.5.11. Usando o zmodem com o tip?

Para receber arquivos, inicie o programa de envio no terminal remoto. Em seguida, digite ~C rz para começar a recebê-los localmente.

Para enviar arquivos, inicie o programa de recebimento no terminal remoto. Em seguida, digite ~C sz files para enviá-los ao sistema remoto.

26.6. Configurando o Console Serial

O FreeBSD tem a capacidade de inicializar um sistema com um terminal burro em uma porta serial como um console. Esta configuração é útil para administradores de sistemas que desejam instalar o FreeBSD em máquinas que não possuem teclado ou monitor conectados, e desenvolvedores que desejam depurar o kernel ou drivers de dispositivos.

Como descrito em O processo de inicialização do FreeBSD, o FreeBSD emprega um bootstrap de três estágios. Os dois primeiros estágios estão no código do bloco de inicialização que é armazenado no início da slice do FreeBSD no disco de inicialização. O bloco de inicialização, em seguida, carrega e executa o carregador de boot como o código do terceiro estágio.

Para configurar a inicialização a partir de um console serial, o código do bloco de inicialização, o código do carregador de inicialização e o kernel precisam ser configurados.

26.6.1. Configuração Rápida do Console Serial

Esta seção fornece uma visão geral rápida da configuração do console serial. Este procedimento pode ser usado quando o terminal burro é conectado ao COM1.

Procedure: Configurando um Console Serial no COM1

  1. Conecte o cabo serial ao COM1 e ao terminal de controle.

  2. Para configurar mensagens de inicialização para exibição no console serial, emita o seguinte comando como o superusuário:

    # echo 'console="comconsole"' >> /boot/loader.conf
  3. Edite /etc/ttys e mude off para on e dialup para vt100 para a entrada ttyu0. Caso contrário, uma senha não será necessária para conectar-se através do console serial, resultando em uma potencial brecha de segurança.

  4. Reinicialize o sistema para ver se as alterações entraram em vigor.

Se uma configuração diferente for necessária, consulte a próxima seção para obter uma explicação de configuração mais detalhada.

26.6.2. Configuração do console serial em profundidade

Esta seção fornece uma explicação mais detalhada das etapas necessárias para configurar um console serial no FreeBSD.

Procedure: Configurando um Console Serial

  1. Prepare um cabo serial.

    Use um cabo de null-modem ou um cabo serial padrão e um adaptador de null-modem. Veja Cabos Serial e Portas para uma discussão sobre cabos seriais.

  2. Desconecte o teclado.

    Muitos sistemas detectam o teclado durante o Power-On Self-Test (POST) e geram um erro se o teclado não for detectado. Algumas máquinas recusarão a inicialização até que o teclado esteja conectado.

    Se o computador reclamar do erro, mas inicializar de qualquer maneira, nenhuma outra configuração será necessária.

    Se o computador se recusar a inicializar sem um teclado conectado, configure o BIOS para que ele ignore este erro. Consulte o manual da placa-mãe para obter detalhes sobre como fazer isso.

    Tente configurar o teclado para "Not installed" no BIOS. Esta configuração diz ao BIOS para não detectar um teclado ao ligar, então ele não deve reclamar se o teclado estiver ausente. Se essa opção não estiver presente no BIOS, procure uma opção "Halt on Error". Configurando isto para "All but Keyboard" ou para "No Errors" terá o mesmo efeito.

    Se o sistema tiver um mouse PS/2™, desconecte-o também. Os mouses PS/2™ compartilham algum hardware com o teclado e, deixar o mouse conectado, pode enganar o sistema e faze-lo pensar que o teclado ainda está lá.

    Embora a maioria dos sistemas inicialize sem um teclado, alguns não inicializarão sem um adaptador gráfico. Alguns sistemas podem ser configurados para inicializar sem nenhum adaptador gráfico alterando a configuração do "graphics adapter" na configuração BIOS para "Not installed". Outros sistemas não suportam esta opção e recusarão a inicialização se não houver hardware de exibição no sistema. Com estas máquinas, deixe algum tipo de placa gráfica ligada, mesmo que seja apenas uma placa mono lixo. Um monitor não precisa ser conectado.

  3. Conecte um terminal burro, um computador antigo com um programa de modem ou a porta serial de outra máquina UNIX™ na porta serial da máquina freebsd.

  4. Adicione as entradas hint.sio.* apropriadas para o /boot/device.hints para a porta serial. Algumas placas com várias portas também exigem opções de configuração do kernel. Consulte sio(4) para obter as opções necessárias e os device hints para cada porta serial suportada.

  5. Crie o boot.config no diretório raiz da partição a na unidade de inicialização.

    Este arquivo instrui o código do bloco de inicialização como inicializar o sistema. Para ativar o console serial, uma ou mais das seguintes opções são necessárias. Ao usar várias opções, inclua todas elas na mesma linha:

    -h

    Alterna entre os consoles interno e serial. Use isso para alternar dispositivos do console. Por exemplo, para inicializar a partir do console (vídeo) interno, use -h para direcionar o carregador de boot e o kernel para usar a porta serial como seu dispositivo de console. Alternativamente, para inicializar a partir da porta serial, use -h para dizer ao gerenciador de inicialização e ao kernel para usar a exibição de vídeo como o console.

    -D

    Alterna entre as configurações de console única e dupla. Na configuração única, o console será o console interno (exibição de vídeo) ou a porta serial, dependendo do estado de -h. Na configuração do console duplo, a exibição de vídeo e a porta serial se tornarão o console ao mesmo tempo, independentemente do estado de -h. No entanto, a configuração do console duplo entrará em vigor somente enquanto o bloco de inicialização estiver em execução. Depois que o gerenciador de boot obtiver controle, o console especificado por -h se tornará o único console.

    -P

    Faz com que o bloco de inicialização avalie o teclado. Se nenhum teclado for encontrado, as opções -D e -h serão automaticamente definidas.

    Devido a restrições de espaço na versão atual dos blocos de inicialização, -P é capaz de detectar somente teclados estendidos. Teclados com menos de 101 teclas e sem as teclas F11 e F12 podem não ser detectados. Teclados em alguns laptops podem não ser encontrados corretamente devido a essa limitação. Se este for o caso, não use -P.

    Use -P para selecionar o console automaticamente ou -h para ativar o console serial. Consulte boot(8) e boot.config(5) para maiores detalhes.

    As opções, exceto para -P, são passadas para o carregador de boot. O gerenciador de boot determinará se o vídeo interno ou a porta serial deve se tornar o console examinando o estado de -h. Isto significa que se -D for especificado mas -h não estiver especificado no /boot.config, a porta serial pode ser usada como console somente durante o bloco de inicialização, pois o gerenciador de inicialização usará a exibição de vídeo interna como o console.

  6. Inicialize a máquina.

    Quando o FreeBSD inicia, os blocos de inicialização mostram o conteúdo do /boot.config para o console. Por exemplo:

    /boot.config: -P
    Keyboard: no

    A segunda linha aparece somente se -P aparecer no /boot.config e indica a presença ou ausência do teclado. Estas mensagens vão para o console serial ou interno, ou ambos, dependendo da opção em /boot.config:

    OpçõesMensagem vai para

    nenhum

    console interno

    -h

    console serial

    -D

    consoles seriais e internos

    -Dh

    consoles seriais e internos

    -P, teclado presente

    console interno

    -P, teclado ausente

    console serial

    Após a mensagem, haverá uma pequena pausa antes que os blocos de inicialização continuem carregando o carregador de boot e antes que qualquer outra mensagem seja impressa no console. Em circunstâncias normais, não há necessidade de interromper os blocos de inicialização, mas pode-se fazê-lo para garantir que as coisas sejam configuradas corretamente.

    Pressione qualquer tecla, exceto Enter, no console para interromper o processo de inicialização. Os blocos de inicialização então solicitarão mais ações:

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

    Verifique se a mensagem acima aparece no console serial ou interno, ou em /boot.config. Se a mensagem aparecer no console correto, pressione Enter para continuar o processo de inicialização.

    Se não houver nenhum prompt no terminal serial, algo está errado com as configurações. Digite -h e depois Enter ou Return para informar o bloco de inicialização (e depois o carregador de inicialização e o kernel) para escolher a porta serial para o console. Quando o sistema estiver ativo, volte e verifique o que deu errado.

Durante o terceiro estágio do processo de inicialização, ainda é possível alternar entre o console interno e o console serial definindo as variáveis de ambiente apropriadas no carregador de inicialização. Veja loader(8) para obter maiores informações.

Esta linha no /boot/loader.conf ou /boot/loader.conf.local configura o carregador de inicialização e o kernel para enviar suas mensagens de inicialização para o console serial, independentemente das opções no /boot.config:

console="comconsole"

Esta linha deve ser a primeira linha do /boot/loader.conf para que as mensagens de boot sejam exibidas no console serial o mais cedo possível.

Se essa linha não existir, ou se estiver definida como console="vidconsole", o carregador de inicialização e o kernel usarão qualquer console indicado por -h no bloco de inicialização. Veja loader.conf(5) para maiores informações.

No momento, o carregador de boot não tem nenhuma opção equivalente a -P no bloco de inicialização, e não há provisão para selecionar automaticamente o console interno e o console serial com base na presença do teclado.

Embora não seja obrigatório, é possível fornecer um prompt login na linha serial. Para configurar isto, edite a entrada para a porta serial em /etc/ttys usando as instruções em Configuração do Terminal. Se a velocidade da porta serial tiver sido alterada, altere std.9600 para corresponder à nova configuração.

26.6.3. Defina uma velocidade de porta serial mais rápida

Por padrão, as configurações da porta serial são 9600 baud, 8 bits, sem paridade e 1 bit de parada. Para alterar a velocidade do console padrão, use uma das seguintes opções:

  • Edite o /etc/make.conf e configure o BOOT_COMCONSOLE_SPEED para a nova velocidade do console. Em seguida, recompile e instale os blocos de inicialização e o carregador de boot:

    # cd /sys/boot
    # make clean
    # make
    # make install

    Se o console serial estiver configurado de alguma outra maneira que não seja inicializando com -h, ou se o console serial usado pelo kernel for diferente daquele usado pelos blocos de inicialização, adicione a seguinte opção, com a velocidade desejada, em um arquivo de configuração de kernel personalizado e compile um novo kernel:

    options CONSPEED=19200
  • Acrescente a opção de inicialização -S_19200_ ao /boot.config, substituindo 19200 pela velocidade a ser utilizada.

  • Adicione as seguintes opções ao /boot/loader.conf. Substitua 115200 pela velocidade de uso.

    boot_multicons="YES"
    boot_serial="YES"
    comconsole_speed="115200"
    console="comconsole,vidconsole"

26.6.4. Entrando no Depurador DDB da Linha Serial

Para configurar a capacidade de inserir o depurador de kernel no console serial, inclua as seguintes opções em um arquivo de configuração de kernel personalizado e compile o kernel usando as instruções em Configurando o kernel do FreeBSD. Observe que, embora isso seja útil para diagnósticos remotos, também é perigoso se um BREAK espúrio for gerado na porta serial. Consulte ddb(4) e ddb(8) para mais informações sobre o depurador do kernel.

options BREAK_TO_DEBUGGER
options DDB

Última alteração em: 9 de março de 2024 por Danilo G. Baio