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

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

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

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

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

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

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

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

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

1. Подключитесь к последовательному порту. Последовательная консоль будет на `COM1`.

2. Выполните `echo -h > /boot.config` для включения последовательной консоли для загрузчика и ядра.

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

4. Команда `shutdown -r now` перезагрузит систему с включенной последовательной консолью.

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

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

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

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

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

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

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

   > Подсказка: Установка параметра клавиатуры ''Not installed'' в настройках BIOS не означает, что вы не сможете использовать клавиатуру. Все, что делает этот параметр -- указывает 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. Этот флаг заменил опцию COMCONSOLE в FreeBSD версий 2.X. Флаг 0x20 должен использоваться вместе с флагом 0x10.

   0x40

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

     > Замечание: В FreeBSD 4.0 или выше семантика флага 0x40 немного другая и для удаленной отладки используется другой флаг.

   Пример:

       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 (если это возможно) для указания загрузочному блоку (а также загрузчику и ядру) выбрать последовательный порт в качестве консоли. Когда система загрузится, проверьте настройки еще раз и определите, что было сделано неправильно.

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

## 20.6.4. Итоги

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

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

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

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

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

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

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

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

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

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

    BOOT_COMCONSOLE_SPEED=19200

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

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

    options CONSPEED=19200

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

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

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

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. Запишите загрузочный блок на загрузочный диск с помощью disklabel(8) и загрузитесь с новым ядром.

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

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

    options BREAK_TO_DEBUGGER
    options DDB

### 20.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` для включения новых настроек.

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

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

### 20.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 загрузочного блока и нет способа автоматического выбора внутренней и последовательной консоли в зависимости от наличия клавиатуры.

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

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

## 20.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>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.