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

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

22.6.1. Введение

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

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

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

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

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

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

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

    # echo 'console="comconsole"' >> /boot/loader.conf
  3. Отредактируйте /etc/ttys и измените off на on и dialup на vt100 для записи ttyd0. В противном случае для входа с последовательной консоли не будет требоваться пароль, что может являться проблемой с точки зрения безопасности.

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

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

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

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

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

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

22.6.4. Итоги

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

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

device sio0 at isa? port IO_COM1 flags 0x10 irq 4
Параметры в /boot.configКонсоль для загрузочного блокаКонсоль для загрузчикаКонсоль для ядра
нетвнутренняявнутренняявнутренняя
-hпоследовательнаяпоследовательнаяпоследовательная
-Dпоследовательная и внутренняявнутренняявнутренняя
-Dhпоследовательная и внутренняяпоследовательнаяпоследовательная
-P, клавиатура присутствуетвнутренняявнутренняявнутренняя
-P, клавиатура отсутствуетпоследовательная и внутренняяпоследовательнаяпоследовательная

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

device sio0 at isa? port IO_COM1 flags 0x30 irq 4
Параметры в /boot.configКонсоль для загрузочного блокаКонсоль для загрузчикаКонсоль для ядра
нетвнутренняявнутренняяпоследовательная
-hпоследовательнаяпоследовательнаяпоследовательная
-Dпоследовательная и внутренняявнутренняяпоследовательная
-Dhпоследовательная и внутренняяпоследовательнаяпоследовательная
-P, клавиатура присутствуетвнутренняявнутренняяпоследовательная
-P, клавиатура отсутствуетпоследовательная и внутренняяпоследовательнаяпоследовательная

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

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

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

BOOT_COMCONSOLE_SPEED=19200

Обратитесь к Раздел 22.6.5.2, «Использование для консоли другого последовательного порта вместо sio0» за подробными инструкциями по сборке и установке новых загрузочных блоков.

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

options CONSPEED=19200

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

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

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

  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) и загрузитесь с новым ядром.

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

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

options BREAK_TO_DEBUGGER
options DDB

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

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

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

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

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

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

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

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

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

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

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.