1

Я пытаюсь переслать оболочку на последовательный порт (USB на RS232), чтобы я мог использовать старый монохромный ЭЛТ-терминал.

Как я могу переслать оболочку на последовательный порт, чтобы другой конец мог отправлять команды и читать вывод, как TTY?

1 ответ1

2

Примечание: ответ объединяет несколько решений с разных сайтов; на данный момент у меня нет возможности их проверить.


SysVinit

Пред- systemd Linux может использовать SysVinit в / и /etc/inittab на нерест getty на различных терминалах. Пример строки может выглядеть так (взято из этого старого руководства):

s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102

Выскочка

Если ваша ОС использует upstart , процедура отличается. Например, есть следующее руководство:

  1. Создайте файл с именем /etc/init/ttyS0.conf содержащий следующее:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. Попроси upstart запустить getty

    sudo start ttyS0
    

Systemd

Согласно этому сайту systemd решение может быть таким простым, как

Чтобы использовать последовательную консоль, просто используйте console=ttyS0 в командной строке ядра, и systemd автоматически запустит getty для нее.

Вы, вероятно, настроите свой GRUB2 для этого. Проанализируйте, что говорит Arch Wiki, и при необходимости настройте его на свой дистрибутив:

Чтобы grub включил последовательную консоль, откройте /etc/default/grub в редакторе. Измените строку GRUB_CMDLINE_DEFAULT чтобы запустить консоль на /dev/ttyS0 . Обратите внимание, что в приведенном ниже примере мы установили две консоли; один на tty0 и один на последовательном порту.

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,38400n8"

Теперь нам нужно сообщить grub, где находится консоль и какую команду запустить, чтобы включить последовательную консоль (обратите внимание, как указано выше для ядра Linux, можно добавить несколько терминалов ввода / вывода в grub, например, GRUB_TERMINAL="console serial" включит оба дисплей и серийный номер):

## Serial console
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --word=8 --parity=no --stop=1"

Перестройте файл grub.cfg с помощью следующей команды:

grub-mkconfig -o /boot/grub/grub.cfg

После перезагрузки getty будет прослушивать /dev/ttyS0 , ожидая 38400 бод, 8 бит данных, без проверки на четность и один стоп-бит. Когда Arch загружается, systemd автоматически запускает сеанс getty для прослушивания на том же устройстве с теми же настройками.

Оба сайта согласны с тем, что если вы не хотите, чтобы GRUB2 слушал на последовательном устройстве, а хотели только прослушать getty после загрузки, вам понадобится что-то вроде

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

По запросу, по требованию

В случае возникновения каких-либо проблем помните, что getty - это просто программа, ее можно запустить по требованию или из rc.local . Обратитесь к man getty за подробностями. Я думаю, что ваша первая попытка может быть как

sudo getty -L 115200 ttyS0 vt102

(Изменить) Это отзыв от OP, он может помочь пользователям с подобными проблемами:

Я должен был сделать sudo su -c "…" чтобы он работал правильно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .