Руководство FreeBSD
Пред. | Глава 23. Последовательные соединения | След.

# 23.6. Настройка последовательной консоли

Предоставил Kazutaka YOKOTA. Оригинальный документ написал Bill Paul.

## 23.6.1. Введение

FreeBSD может загружаться при использовании в качестве консоли текстового терминала на последовательном порту. Такая конфигурация может быть полезна в двух случаях: для системных администраторов, устанавливающих FreeBSD на компьютеры без подключенных клавиатуры или монитора, и для разработчиков, производящих отладку ядра или драйверов устройств.

Как описано в Гл. 12, процесс загрузки FreeBSD состоит из трех стадий. Первые две стадии реализованы в блоке загрузки, находящемся в начале слайса FreeBSD на загрузочном диске. На третей стадии загрузочный блок запускает загрузчик (`/boot/loader`).

Для настройки последовательной консоли вам потребуется настроить блок загрузки, загрузчик и ядро.

## 23.6.2. Настройка последовательной консоли, краткая версия

В этом разделе предполагается, что вы используете настройки по умолчанию и просто хотите увидеть краткий обзор настройки последовательной консоли.

1. Соедините кабелем последовательный порт COM1 и управляющий терминал.

2. Для того, чтобы сообщения в процессе загрузки выводились в последовательную консоль, выполните от имени суперпользователя команду

       # echo 'console="comconsole"' >> /boot/loader.conf

3. Отредактируйте `/etc/ttys` и измените `off` на `on` и `dialup` на `vt100` для записи `ttyd0`. В противном случае для входа с последовательной консоли не будет требоваться пароль, что может являться проблемой с точки зрения безопасности.

4. Перезагрузите систему и убедитесь, что последовательная консоль активировалась.

Если вам требуется иная конфигурация, обратитесь к более подробному описанию в разделе Разд. 23.6.3.

## 23.6.3. Настройка последовательной консоли

1. Подготовьте кабель.

   Вам потребуется нуль-модемный или стандартный последовательный кабель и нуль-модемный адаптер. Обратитесь к Разд. 23.2.2, где рассматриваются последовательные кабели.

2. Отключите клавиатуру.

   Большинство систем PC тестируют клавиатуру во время включения (POST) и выдают ошибку если клавиатура не обнаружена. Некоторые системы при отсутствии клавиатуры выдают звуковой сигнал и не загружаются пока клавиатура не будет подключена.

   Если компьютер сообщает об ошибке, но все же загружается, вам не потребуется делать что-то еще. (Некоторые компьютеры с Phoenix BIOS просто сообщают “`Keyboard failed`” и продолжают загрузку).

   Если компьютер не загружается без клавиатуры, вам потребуется настроить BIOS так, чтобы отсутствие клавиатуры игнорировалось (если это возможно). Обратитесь к руководству по материнской плате за деталями о том, как это сделать.

   > Подсказка: Установите параметр клавиатуры в настройках BIOS в значение ''Not installed''. При этом вы сможете продолжать использовать клавиатуру. Все, что делает этот параметр -- указывает BIOS не тестировать клавиатуру во время загрузки, поэтому ее отсутствие не вызывает ошибки. Вы можете оставить клавиатуру подключенной, даже если с флагом ''Not installed'', и она все еще будет работать.

   > Замечание: Если в к системе подключена PS/2® мышь, отключите ее, как и клавиатуру. Мышь PS/2 использует часть оборудования совместно с клавиатурой, поэтому если оставить ее подключенной, тестирование клавиатуры может ошибочно выдать наличие последней. Например, система Gateway 2000 Pentium 90 MHz ведет себя именно так. К тому же, это не проблема, поскольку мышь без клавиатуры как правило не нужна.

3. Подключите текстовый терминал к `COM1` (`sio0`).

   Если у вас нет текстового терминала, используйте старый PC/XT с модемной программой, или последовательный порт на другом компьютере UNIX®. Если порта `COM1` (`sio0`) нет, подключите его. На данный момент нет способа использовать другой порт вместо `COM1` без перекомпиляции загрузочных блоков. Если вы уже используете `COM1` для подключения другого устройства, временно удалите это устройство установите новый загрузочный блок и ядро как только FreeBSD заработает. (Предполагается, что `COM1` будет доступен на файловом/вычислительном/терминальном сервере в любом случае; если вам действительно требуется `COM1` для чего-то другого (и вы не можете переключить это на `COM2` (`sio1`)), возможно не стоит беспокоиться об этом сейчас.)

4. Убедитесь, что в файле настройки ядра установлены соответствующие флаги для `COM1` (`sio0`).

   Подходящие флаги такие:

   `0x10`

     Включает поддержку консоли для этого устройства. Если установлен этот флаг, другие игнорируются. На данный момент поддержка консоли может быть включена не более чем на одном устройстве; предпочтительно на первом (в соответствии с порядком в конфигурационном файле) с установкой этого флага. Эта опция сама по себе не сделает последовательный порт консолью. Установите следующий флаг или используйте опцию `-h`, описанную ниже, вместе с этим флагом.

   `0x20`

     Включает поддержку консоли на устройстве (если нет другой консоли с более высоким приоритетом), независимо от наличия описываемой ниже опции `-h`. Флаг `0x20` должен использоваться вместе с флагом `0x10`.

   `0x40`

     Резервирует это устройство (совместно с флагом `0x10`) и делает устройство недоступным для обычной работы. Вы не должны использовать этот флаг для устройства последовательного порта, которое будет использоваться в качестве последовательной консоли. Используйте этот флаг только если устройство предназначено для удаленной отладки ядра. Обратитесь к Руководству для разработчиков за дополнительной информацией по удаленной отладке.

   Пример:

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

   Обратитесь к странице справочника sio(4) за подробностями.

   Если флаги не были установлены, вам потребуется запустить UserConfig (на другой консоли) или пересобрать ядро.

5. Создайте `boot.config` в корневом каталоге раздела `a` на загрузочном диске.

   Этот файл сообщит загрузочному блоку способ загрузки системы. Для активации последовательной консоли вам потребуется одна или несколько следующих опций -- несколько опций могут быть указаны на одной строке:

   `-h`

     Переключает внутреннюю и последовательную консоль. Вы можете использовать ее для переключения устройств консоли. Например, при загрузке с внутренней (видео) консоли, вы можете использовать `-h` для запуска загрузчика и ядра с использованием последовательного порта в качестве устройства консоли. При загрузке с последовательной консоли, вы можете использовать опцию `-h` для указания загрузчику и ядру использовать в качестве консоли видео дисплей.

   `-D`

     Переключает одно- и двухконсольную конфигурации. В одноконсольной конфигурации консоль может быть либо внутренней (видео дисплей), либо последовательным портом, в зависимости от состояния опции `-h`. В двухконсольной конфигурации и видео дисплей и последовательный порт станут консолями одновременно, независимо от состояния опции `-h`. Имейте ввиду, что конфигурация с двумя консолями работает только во время работы загрузочного блока. Как только управление переходит к загрузчику, остается только одна консоль, указанная опцией `-h`.

   `-P`

     Указывает загрузочному блоку протестировать клавиатуру. Если клавиатура не найдена, автоматически устанавливаются параметры `-D` и `-h`.

     > Замечание: По причине ограничений на размер в существующей версии загрузочного блока, опция `-P` может протестировать только расширенные клавиатуры. Клавиатуры с менее чем 101 клавишами (и без клавиш F11 и F12) могут быть не обнаружены. Клавиатуры некоторых лэптопов могут быть не найдены из-за этого ограничения. Если это случилось, вы не сможете использовать опцию `-P`. К сожалению, не существует обходного пути решения этой проблемы.

   Используйте или опцию `-P` для автоматического выбора консоли, или опцию `-h` для активации последовательной консоли.

   Вы можете включить также другие опции, описанные в boot(8).

   Опции, за исключением `-P`, будут переданы загрузчику (`/boot/loader`). Загрузчик определит будет ли консолью внутреннее видео устройство или последовательный порт, проверив только состояние опции `-h`. Это означает, что если вы включите в `/boot.config` опцию `-D`, но не `-h`, то сможете использовать консоль только во время работы загрузочного блока; загрузчик будет использовать внутреннее видео устройство в качестве консоли.

6. Загрузите компьютер.

   Когда вы включите компьютер FreeBSD, загрузочный блок выведет содержимое `/boot.config` на консоль. Например:

       /boot.config: -P
       Keyboard: no

   Вторая строка появится только если вы поместите `-P` в `/boot.config` и отражает наличие/отсутствие клавиатуры. Эти сообщения выводятся либо на последовательную, либо на внутреннюю консоль, или на обе, в зависимости от параметров в `/boot.config`.

   Опции | Сообщения выводятся на
   --- | ---
   нет | внутренняя консоль
   `-h` | последовательная консоль
   `-D` | последовательная и внутренняя консоли
   `-Dh` | последовательная и внутренняя консоли
   `-P`, клавиатура присутствует | внутренняя консоль
   `-P`, клавиатура отсутствует | последовательная консоль

   После вывода вышеприведенных сообщений, происходит небольшая пауза перед тем, как запускается загрузчик и на консоли появляются следующие сообщения. В нормальной ситуации вам не потребуется прерывать загрузку в этот момент, но это можно сделать, чтобы убедиться, что все настроено правильно.

   Нажмите на консоли любую клавишу кроме Enter для прерывания процесса загрузки. Загрузочный блок выдаст приглашение к дальнейшим действиям. Оно выглядит примерно так:

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

   Убедитесь, что сообщение выше появилось на последовательной, внутренней консоли или на обеих, в зависимости от опций в `/boot.config`. Если сообщение появилось там, где должно было появиться, нажмите Enter для продолжения процесса загрузки.

   Если вам нужна последовательная консоль, но на терминале не видно приглашения, это означает проблемы с настройками. Введите `-h` и нажмите Enter/Return (если это возможно) для указания загрузочному блоку (а также загрузчику и ядру) выбрать последовательный порт в качестве консоли. Когда система загрузится, проверьте настройки еще раз и определите, что было сделано неправильно.

После запуска загрузчика и перехода в третью стадию процесса загрузки вы все еще можете переключиться между внутренней консолью и последовательной консолью путем установки соответствующих переменных окружения в загрузчике. Обращайтесь к разделу Разд. 23.6.6.

## 23.6.4. Итоги

Здесь приведены краткие итоги по различным настройкам, рассмотренным в этом разделе и выбираемым в соответствии с ними консолям.

### 23.6.4.1. Вариант 1: вы устанавливаете для `sio0` флаги 0x10

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

Параметры в /boot.config | Консоль для загрузочного блока | Консоль для загрузчика | Консоль для ядра
--- | --- | --- | ---
нет | внутренняя | внутренняя | внутренняя
`-h` | последовательная | последовательная | последовательная
`-D` | последовательная и внутренняя | внутренняя | внутренняя
`-Dh` | последовательная и внутренняя | последовательная | последовательная
`-P`, клавиатура присутствует | внутренняя | внутренняя | внутренняя
`-P`, клавиатура отсутствует | последовательная и внутренняя | последовательная | последовательная

### 23.6.4.2. Вариант 2: вы устанавливаете для `sio0` флаги 0x30

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

Параметры в /boot.config | Консоль для загрузочного блока | Консоль для загрузчика | Консоль для ядра
--- | --- | --- | ---
нет | внутренняя | внутренняя | последовательная
`-h` | последовательная | последовательная | последовательная
`-D` | последовательная и внутренняя | внутренняя | последовательная
`-Dh` | последовательная и внутренняя | последовательная | последовательная
`-P`, клавиатура присутствует | внутренняя | внутренняя | последовательная
`-P`, клавиатура отсутствует | последовательная и внутренняя | последовательная | последовательная

## 23.6.5. Приемы работы с последовательной консолью

### 23.6.5.1. Установка более высокой скорости порта

По умолчанию, последовательный порт настроен так: 9600 бит/с, 8 бит, без четности, 1 стоп бит. Если вам необходимо изменить скорость, потребуется перекомпиляция как минимум загрузочных блоков. Добавьте следующую строку к `/etc/make.conf` и скомпилируйте новый загрузочный блок:

    BOOT_COMCONSOLE_SPEED=19200

Обратитесь к Разд. 23.6.5.2 за подробными инструкциями по сборке и установке новых загрузочных блоков.

Если последовательная консоль настраивается не путем установки параметра `-h`, или последовательная консоль, используемая ядром, отличается от той, что используется загрузочным блоком, потребуется добавить следующие опции к файлу настройки ядра и собрать новое ядро:

    options CONSPEED=19200

### 23.6.5.2. Использование для консоли другого последовательного порта вместо `sio0`

Использование другого последовательного порта вместо `sio0` для консоли потребует кое-какой перекомпиляции. Если вы по каким-либо причинам хотите использовать другой последовательный порт, перекомпилируйте загрузочный блок, загрузчик и ядро согласно приведенной ниже инструкции.

1. Получите исходные тексты ядра (глава Гл. 22)

2. Отредактируйте `/etc/make.conf` и установите `BOOT_COMCONSOLE_PORT` в соответствии с адресом порта, который вы хотите использовать (0x3F8, 0x2F8, 0x3E8 или 0x2E8). Могут быть использованы только устройства от `sio0` до `sio3` (от `COM1` до `COM4`); мультипортовые последовательные карты не будут работать. Установка прерываний не требуется.

3. Создайте файл настройки ядра и добавьте соответствующие флаги для порта, который планируется использовать. Например, если вы хотите использовать для консоли `sio1` (`COM2`):

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

   или

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

   Флаги для других последовательных устройств не устанавливайте.

4. Соберите и установите загрузочный блок и загрузчик:

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

5. Соберите и установите ядро.

6. Запишите загрузочный блок на загрузочный диск с помощью bsdlabel(8) и загрузитесь с новым ядром.

### 23.6.5.3. Вход в отладчик DDB с последовательной линии

Если вы хотите войти в отладчик ядра с последовательной консоли (полезно для удаленной диагностики, но опасно если вы введете неправильный BREAK на последовательном порту!), потребуется собрать ядро со следующими параметрами:

    options BREAK_TO_DEBUGGER
    options DDB

### 23.6.5.4. Получение приглашения на последовательной консоли

Хотя это не обязательно, вам может потребоваться приглашение login по последовательной линии, в дополнение к уже доступным загрузочным сообщениям и отладочной сессии ядра. Здесь описано как сделать это.

Откройте файл `/etc/ttys` с помощью редактора и найдите строки:

    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

Строки от `ttyd0` до `ttyd3` соответствуют портам от `COM1` до `COM4`. Измените `off` на `on` для требуемого порта. Если вы изменили скорость последовательного порта, может потребоваться изменить `std.9600` для соответствия текущим настройкам, например `std.19200`.

Возможно, вы захотите заменить тип терминала `unknown` на тип реально используемого терминала.

После редактирования файла потребуется выполнить `kill -HUP 1` для включения новых настроек.

## 23.6.6. Изменение консоли из загрузчика

Предыдущий раздел описывает настройку последовательной консоли изменением параметров загрузочного блока. Этот раздел показывает, как указать консоль, вводя команды и переменные окружения для загрузчика. Поскольку загрузчик загружается после загрузочного блока, на третьей стадии загрузочного процесса, настройки загрузчика превалируют над настройками загрузочного блока.

### 23.6.6.1. Настройка последовательной консоли

Вы можете прямо указать загрузчику и ядру использовать последовательную консоль, записав одну строку в `/boot/loader.rc`:

    set console="comconsole"

Это сработает независимо от настроек загрузочного блока, рассмотренных в предыдущем разделе.

Поместите эту строку в самое начало `/boot/loader.rc`, чтобы увидеть на последовательной консоли все загрузочные сообщения.

Вы можете также указать внутреннюю консоль:

    set console="vidconsole"

Если вы не установите переменную загрузчика `console`, загрузчик, а затем и ядро будут использовать ту консоль, которая установлена параметром `-h` для загрузочного блока.

В версиях 3.2 или выше, вы можете указать консоль в `/boot/loader.conf.local` или `/boot/loader.conf` вместо `/boot/loader.rc`. С этим методом `/boot/loader.rc` должен выглядеть примерно так:

    include /boot/loader.4th
    start

Затем, создайте `/boot/loader.conf.local` и поместите туда следующую строку.

    console=comconsole

или

    console=vidconsole

Обращайтесь к loader.conf(5) за дополнительной информацией.

> Замечание: На данный момент у загрузчика нет параметра, эквивалентного параметру `-P` загрузочного блока и нет способа автоматического выбора внутренней и последовательной консоли в зависимости от наличия клавиатуры.

### 23.6.6.2. Использование для консоли отличного от `sio0` последовательного порта

Вам потребуется перекомпилировать загрузчик для использования отличного от `sio0` последовательного порта в качестве консоли. Следуйте процедуре, описанной в разделе Разд. 23.6.5.2.

## 23.6.7. Предостережения

Идея в том, чтобы настроить выделенный сервер, который не требует графического оборудования или подсоединенной клавиатуры. К сожалению, хотя многие системы способны загрузиться без клавиатуры, есть совсем немного систем, способных загрузиться без графического адаптера. Компьютеры с AMI BIOS могут быть настроены для загрузки без графического адаптера простой установкой параметра настройки CMOS ''graphics adapter'' в значение ''Not installed''.

Однако, многие компьютеры не поддерживают этот параметр и не смогут загрузиться без графического оборудования. Для этих компьютеров вам потребуется оставить подключенной любую графическую карту (даже если это просто старая моно карта), хотя монитор и не подключен.

Пред. | Начало | След.
Исходящие соединения по модему | Уровень выше | PPP и SLIP

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.