четверг, 23 декабря 2010 г.

Руководство по программированию СОМ-порта

Руководство по программированию СОМ-порта в POSIX операционных системах
Перевод руководства по программированию СОМ-порта в POSIX операционных системах

Управление linux-машиной через последовательный порт

Иногда бывает такое, что по сети компьютер не доступен, а управлять им как-то надо. Обычно в результате ошибок настройки сети. Особенно обидно, когда к нему нет прямого физического доступа. Можно использовать KVM-переключатель с поддержкой сети, но такие устройства пока еще очень дороги, да и требуют достаточно быстрого подключения, потому как передают изображение, а не текст. Сервера известных производителей обычно имеют собственные средства управления (вроде iLo), но эти решения тоже весьма недешевы.
Здесь мы посмотрим на более простой и исторически важный способ удаленного управления. Когда-то давно так осуществлялось управление вообще всеми компьютерами. Да и сейчас он широко применяется для настройки управляемого сетевого оборудования. Это подключение через последовательный порт (он же RS232, он же COM).
Для минимальной настройки нам потребуются всего две строки. Первая в настройках загрузчика (обычно /boot/grub/grub.conf или /boot/grub/menu.lst).

title openSUSE 11.0 root (hd0,0) kernel /boot/vmlinuz root=/dev/disk/by-id/scsi-SATA_ST3200826AS_4ND1LX0B-part1 resume=/dev/sda2 splash=silent showopts console=tty0 console=ttyS0,9600n8 initrd /boot/initrd 

Мы добавили к параметрам ядра строку console=tty0 console=ttyS0,9600n8, которой включили поддержку serial-консоли. Теперь осталось запустить на ней процесс, ответственный за терминал. Это делается в /etc/inittab. Добавим туда строку:

S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102  

Теперь соединяем компьютеры кабелем. В наше время кабель с двумя DB9 Female разъемами еще поискать надо, но найти можно. Осталось настроить программу-терминал. Мы возьмем minicom как наиболее распространенную и присутствующую в большинстве дистрибутивов. Запустите его с ключом -s (minicom -s) чтобы настроить программу. Нам нужно выставить в свойствах com-порта скорость 9600 бит/с, порт /dev/ttyS0, остальное можно оставить по умолчанию. /dev/ttyS0 это порт COM1, если у вас их несколько, укажите соответствующее устройство (они будут называться ttyS1 и так далее). Сохраните как настройки по умолчанию (dfl) и можете соединяться. Для соединения теперь достаточно запустить minicom без параметров.
Единственной проблемой является то, что терминалы не поддерживают Unicode, поэтому русские буквы с высокой вероятностью правильно отображаться не будут. С другой стороны как основной способ управления это использовать никто не будет, а для средства «последней надежды» это не существенно.