17.6. Configurando uma console serial

Contribuição de Kazutaka YOKOTA. Baseado no documento de Bill Paul.

17.6.1. Introdução

O FreeBSD tem a habilidade de bootar em um sistema que possua somente um terminal burro como console, conectado na porta serial. Esta configuração pode ser útil para duas classes de pessoas: administradores de sistema que desejam instalar o FreeBSD em máquinas que não possuem teclado ou monitor conectados, e desenvolvedores que querem depurar o kernel ou drivers de dispositivos.

Como descrito em Capítulo 7, o FreeBSD emprega em seu boot três estágios. Os primeiros dois estágios estão no código do bloco de boot que é armazenado no início da partição do disco de boot do FreeBSD. O bloco de boot carregará e executará o carregador de boot (/boot/loader) como o terceiro estágio de boot.

Visando iniciar a console serial vocÊ deve configurar o código do bloco de boot, o carregador de boot e o kernel do sistema.

17.6.2. Configuração da console serial

  1. Prepare um cabo serial.

    Você precisará de um cabo serial para modem ou um cabo serial padrão e um conector para serial de modem. Visite Seção 17.2.2 para um debate sobre cabos seriais.

  2. Desconecte seu teclado.

    A maioria dos sistemas PC testa a existência de um teclado durante o POST (Power-On Self-Test) e gerará um erro se o teclado não for detectado. Algumas máquinas reclamam a falta de um teclado de maneira tal que não prosseguem para o boot até que se tenha um teclado conectado.

    Se seu computador retorna este erro mas ainda assim prossegue com o boot então você não terá que fazer nada especial. (Algumas máquinas que possuem a BIOS Phoenix instalada apenas retornam ``Keyboard failed'' e continuam com o boot normalmente.)

    Se seu computador se recusa a continuar o boot sem ter um teclado conectado então você terá que configurar a BIOS para que este erro seja ignorado(se for possível). Consulte o manual da sua placa-mãe para verificar como fazer isso.

    Dica: Configurar na BIOS que o teclado ``não foi instalado'' não significa que você não poderá fazer uso do seu teclado posteriormente. Isso é para dizer para a BIOS que não cheque por um teclado quando a máquina for ligada, o que fará com que ela não reporte que o teclado não está conectado. Você pode deixar o teclado conectado mesmo com esta configuração feita e este funcionará normalmente.

    Nota: Se seu sistema possue um mouse PS/2®, são grandes as chances de você ter que desconectar seu mouse assim como seu teclado. Isto devido a mouses PS/2 compartilharem dispositivos físicos com teclados e deixando o mouse conectado pode resultar na detecção de que o teclado também está conectado. Isto é reportado pelo sistema Gateway 2000 Pentium 90 MHz com a BIOS AMI, que se comporta desta maneira. No geral, isto não é um problema desde que o mouse não é muito útil sem um teclado.

  3. Conecte o terminal burro na COM1 (sio0).

    Se você não possui um terminal burro, é poss¡vel fazer uso de um PC/XT antigo com um programa de modem, ou uma porta serial num outro sistema UNIX®. Se você não possui uma COM1 (sio0), consiga uma. Para o que se pretende não há uma maneira de selecionar outra porta que não a COM1, para ser utilizada com o bloco de boot sem recompilá-lo. Se você já está usando a COM1 para outro dispositivo, você terá que removê-lo temporariamente para instalar um novo bloco de boot e kernel, uma vez que seu FreeBSD esteja em execução. (É assumido que a COM1 estará disponível neste servidor sem monitor e teclado; se você realmente tem a necessidade de usar a COM1 para outra coisa (e você não pode mudar a utilização da COM1 para a COM2 (sio1)), então provavelmente você não tem que se pertubar com isso em primero lugar.)

  4. Certifique-se de que o arquivo de configuração do seu kernel tem as configurações apropriadas para a COM1 (sio0).

    são configurações relevantes:

    0x10

    Ativa o suporte a console nesta unidade. As outras configurações serão ignoradas se esta for definida. Atualmente, pelo menos uma unidade tem que ter a configuração de suporte a console; é desejável que seja a primeira (na ordem do arquivo de configuração). Esta opção sozinha não fará da porta serial uma porta para console. Defina a configuração seguinte ou use a opção -h descrita abaixo, junto com a configuração de console.

    0x20

    Força que esta unidade seja uma console (a menos que exista uma outra com maior prioridade), sem levar em consideração a opção -h discutida abaixo. Esta configuração sobrepõe a opção COMCONSOLE na versão 2 do FreeBSD 2.X. O valor de configuração 0x20 deve ser usado junto com o valor 0x10.

    0x40

    Reserve esta unidade (em conjunto com 0x10) e fará com que a unidade fique indisponível para acesso normal. Você não deve configurar este valor para a unidade de porta serial que você quer usar como console. A única utilização deste valor é para designar a unidade para depuração remota de kernel. Visite The Developer's Handbook para maiores informações sobre depuração remota.

    Nota: No FreeBSD 4.0 ou acima a semântica do valor 0x40 é ligeiramente diferente e há um outro valor para especificar que a porta serial será utilizada para depuração remota.

    Exemplo:

    device sio0 at isa? port IO_COM1 flags 0x10 irq 4
    

    Veja a página de manual do sio(4) para maiores detalhes.

    Se os valores não forem definidos, você precisará executar UserConfig (em um console diferente) ou recompilar o kernel.

  5. Crie o arquivo boot.config no diretório root da partição a no disco de boot.

    Este arquivo instruirá o código do bloco de boot do sistema. Visando ativar a console serial, você precisará de uma ou mais da seguinte opção options-- se você quiser múltiplas opções inclua todas na mesma linha:

    -h

    Alterna entre console interna e seriais. Você pode utilizar para alternar dispositivos de console. Por exemplo, se você iniciar o sistema com a console interna (monitor de vídeo) você pode utilizar -h para direcionar o carregamento do boot e o kernel para a porta serial como um dispositivo de console. No contrário, com -h você pode direcionar da console da porta serial para a sua console do monitor de vídeo.

    -D

    Alterna configurações de console única ou dupla. Numa configuração de console única você terá unicamente a console interna(monitor de vídeo) ou a console da porta serial, dependendo do que foi configurado na opção -h. Numa configuração de console dupla, ambas, a console interna e a console serial serão utilizáveis simultâneamente, independente da configuração do -h. Entretanto, a configuração de console dupla terá efeito somente durante a execução do bloco de boot. Uma vez que o controlador de boot assumir o controle, a console especificada pela opção -h será a única console.

    -P

    Faz com que o bloco de boot tente detectar o teclado. Caso não encontre, a opção -D e -h são ajustadas automaticamente.

    Nota: Devido as definições de espaço da versão atual dos blocos de boot a opção -P só é capaz de detectar teclados extendidos. Teclados com menos de 101 teclas (e sem as teclas F11 e F12) não poderao ser detectados. Alguns tipos de teclados de computadores portáteis(laptops) não poderão ser detectados corretamente devido a esta limitação. Se este é o caso do seu sistema, você terá que abandonar o uso da opção -P. Infelizmente, não há opções para este problema.

    Utilize uma opção qualquer de -P para selecionar a console automaticamente, ou a opção -h para ativar a console serial.

    Você pode ainda incluir outras opções como bem descrito em boot(8).

    As opções, com exceção da opção -P, serão passadas ao carregador de boot (/boot/loader). O carregador de boot determinará entre o vídeo ou a porta serial qual deverá ser utilizado para a console examinando a configuração da opção -h. Isto significa que, se você especificar a opção -D mas não a opção -h no arquivo /boot.config, você poderá utilizar a porta serial como console apenas durante o bloco de boot; o carregador de boot usará o vídeo como console.

  6. Boot o computador.

    Quando você iniciar o seu sistema FreeBSD, o bloco de boot listará o conteúdo de /boot.config na console. Por exemplo:

    /boot.config: -P
    Keyboard: no
    

    A segunda linha aparece somente se você colocar a opção -P no /boot.config que indicará a presença/ausência do teclado. Estas mensagens irão tanto para a console serial, ou para a interna, ou ainda para ambas, dependerá das opções em /boot.config.

    Opções Mensagens irão para
    none console interna
    -h console serial
    -D console serial e interna
    -Dh console serial e interna
    -P, teclado presente console interna
    -P, teclado ausente console serial

    Após as mensagens acima haverá uma pequena pausa antes que bloco de boot continue o carregamento do boot e antes que qualquer mensagem seja listada na console. Sob circunstâncias normais, você não precisará interromper o boot, mas você pode querer fazer algo para certificar que tudo foi configurado corretamente.

    Pressione qualquer tecla diferente de Enter na console para interromper o processo de boot. O bloco de boot apresentará um prompt que permitirá fazer ações adicionais. Você deve ver algo como:

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

    Verifique se a mensagem acima aparece somente na serial ou na interna, ou ainda em ambas, de acordo como você definiu em /boot.config. Se a mensagem aparece na console correta, pressione Enter para continuar o processo de boot.

    Se você quer usar a console serial mas você não vê o prompt no terminal serial, algo está errado em suas configurações. No momento certo, você entrou com a opção -h e pressionou Enter/Return (se porssível) para dizer ao bloco de boot(e então ao carregador de boot e ao kernel) para escolher a porta serial para a console. Uma vez que o sistema estiver utilizável, volte e verifique o que está errado.

Após o carregamento do controlador de boot, você estará no terceiro estágio do processo de boot, você pode ainda alternar entre a console interna e a serial configurando as variáveis de ambiente de maneira apropriada no carregador de boot. Consulte a Seção 17.6.5.

17.6.3. Sumário

Temos aqui um sumário das várias configurações discutidas nesta seção e eventualmente a console selecionada.

17.6.3.1. Caso 1: Você definiu o valor 0x10 para sio0

device sio0 at isa? port IO_COM1 flags 0x10 irq 4
Opções em /boot.config Console durante o bloco de boot Console durante o carregador de boot Console no kernel
nenhuma interna interna interna
-h serial serial serial
-D serial e interna interna interna
-Dh serial e interna serial serial
-P, teclado presente interna interna interna
-P, teclado ausente serial e interna serial serial

17.6.3.2. Caso 2: Você definiu o valor 0x30 para sio0

device sio0 at isa? port IO_COM1 flags 0x30 irq 4
Opções em /boot.config Console durante o bloco de boot Console durante o carregador de boot Console no kernel
nenhuma interna interna serial
-h serial serial serial
-D serial e interna interna serial
-Dh serial e interna serial serial
-P, teclado presente interna interna serial
-P, teclado ausente serial e interna serial serial

17.6.4. Dicas para a console serial

17.6.4.1. Configurante a mais rápida velocidade da porta serial

Por padrão, a porta serial está configurada para: 9600 baud, 8 bits, sem paridade, e 1 bit de parada. Se vocÊ quiser alterar a velocidade terá de recompilar pelo menos o bloco de boot. Adicione a seguinte linha ao /etc/make.conf e compile o novo bloco de boot:

BOOT_COMCONSOLE_SPEED=19200

Se a console serial está configurada de maneira diferente de estar realizando o boot com -h, ou se a console serial utilizada pelo kernel é diferente da utilizada pelo bloco de boot, então você deve também adicionar a seguinte opção no arquivo de configuração do seu kernel e compilar um novo kernel:

options CONSPEED=19200

17.6.4.2. Utilizando outra porta serial que não seja a sio0 para a console

Utilizar outra porta que não seja a sio0 como a que a console usa necessitará de recompilação. Se você deseja utilizar uma outra porta serial por qualquer que seja a razão, recompile o bloco de boot, o carregador de boot e o kernel como a seguir.

  1. Obtenha o código fonte do kernel. (Visite o Capítulo 21)

  2. Edite o /etc/make.conf e configure BOOT_COMCONSOLE_PORT para o endereço da porta que você quer utilizar(0x3F8, 0x2F8, 0x3E8 ou 0x2E8). Somente de sio0 a sio3 (COM1 a COM4) podem ser utilizadas; placas de multiseriais não funcionarão. Não é necessária a configuração de interrupção.

  3. Crie um arquivo de configuração de kernel personalizado e adicione as opções apropriadas para a porta serial que você deseja utilizar. Por exemplo, se você quer usar a sio1 (COM2) como console:

    device sio1 at isa? port IO_COM2 flags 0x10 irq 3
    

    ou

    device sio1 at isa? port IO_COM2 flags 0x30 irq 3
    

    As opções de console para as outras portas não devem ser definidas.

  4. Recompile e instale o bloco de boot e o carregador de boot:

    # cd /sys/boot
    # make
    # make install
    
  5. Recontrua e instale o kernel.

  6. Grave o bloco de boot no disco de boot com disklabel(8) e boot com este novo kernel.

17.6.4.3. Entrando no DDB Debugger através da linha serial

Se você deseja definir que as informações de depuração do kernel sejam emitidas na console serial (muito útil para diagnósticos remotos, porém também perigoso se houver a geração de um BREAK falso na porta serial!) então vocÊ deve compilar o seu kernel com as seguintes opções:

options BREAK_TO_DEBUGGER
options DDB

17.6.4.4. Obtendo um prompt de login na console serial

Enquanto isso não é requerido, você pode desejar obter um prompt de login através da linha serial, o que até agora permitiria ver mensagens do boot e entrar em depuração de kernel através da console serial. Veja aqui como fazer isso.

Abra o arquivo /etc/ttys com um editor de textos e localize as linhas:

ttyd0 "/usr/libexec/getty std.9600" unknown off secure
ttyd1 "/usr/libexec/getty std.9600" unknown off secure
ttyd2 "/usr/libexec/getty std.9600" unknown off secure
ttyd3 "/usr/libexec/getty std.9600" unknown off secure

De ttyd0 a ttyd3 que corresponde da COM1 a COM4. Altere onde está off para on para as portas que desejar. Se você tiver alterado a velocidade da porta serial, você precisará alterar std.9600 para a configuração correspondente, como por exemplo std.19200.

Você pode também querer alterar o tipo do terminal de unknown para o tipo atual do seu terminal serial.

Após editar o arquivo você deve executar kill -HUP 1 para que as alterações realizadas tenham efeito.

17.6.5. Alterando a console através do carregador de boot

Seções anteriores descreveram como configurar uma console no bloco de boot. Esta seção demonstra que você pode especificar a console entrando com alguns comandos e configurando algumas variáveis de ambiente no carregador de boot. Como o carregador de boot é executado como o terceiro estágio do processo de boot, depois do bloco de boot, as configurações do carregador de boot irão sobrepôr as configurações definidas no bloco de boot.

17.6.5.1. Configurando a console serial

Você pode facilmente especificar ao carregador de boot e ao kernel para que estes usem a console serial adicionando apenas uma linha em /boot/loader.rc:

set console=comconsole

Isto terá efeito apesar das configurações feitas no bloco de boot, como discutido em seções anteriores.

Prefira colocar a linha acima como a primeira linha do /boot/loader.rc pois assim você verá as mensagens de boot na console serial o mais rápido possível.

Da mesma maneira que você pode especificar o uso da console interna com:

set console=vidconsole

Se você não configurou a variável de ambiente console no carregador de boot, este, e posteriormente o kernel, utilizarão qualquer console indicada pela opção -h no bloco de boot.

Nas versões 3.2 ou posteriores, você pode especificar a console em /boot/loader.conf.local ou /boot/loader.conf, assim também como no /boot/loader.rc. Neste método, seu /boot/loader.rc deve apresentar algo como:

include /boot/loader.4th
start

então, crie o /boot/loader.conf.local e coloque a seguinte linha nele.

console=comconsole

ou

console=vidconsole

Visite a loader.conf(5) para mais informações.

Nota: Neste momento, o carregador de boot não tem equivalente para a opção -P como no bloco de boot, e não há o fornecimento de uma seleção automática de console interna ou serial baseadas na presença do teclado.

17.6.5.2. Utilizando outra porta serial que não seja a sio0 para a console

Você precisa recompilar o carregador de boot para poder utilizar outra porta serial que não seja a sio0 como console. Siga os procedimentos descritos na Seção 17.6.4.2.

17.6.6. Advertências

A idéia aqui é a de permitir que pessoas configurem servidores dedicados que não requerem dispositivos gráficos ou teclados conectados. Desafornutadamente, enquanto a maioria dos sistemas permitirá que seja feito o boot sem um teclado, há um pequeno grupo de equipamentos que não permitirão o boot sem um adaptador gráfico(placa de vídeo). Computadores com AMI BIOS podem ser configurados para que façam o boot sem um adaptador gráfico instalado simplesmente definindo na configuração da CMOS que o ``adaptador gráfico não foi instalado''.

Entretanto, diversas máquinas não disponibilizarão esta opção e se negarão a continuarem até o boot sem um adaptador gráfico conectado ao equipamento. Com estas máquinas você terá que ter alguma placa gráfica conectada ao equipamento(mesmo que esta for uma péssima placa monocromática) ainda que você não conectará o monitor. Você também pode tentar instalar uma AMI BIOS.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.