Linux com port console

Ubuntu Documentation

Content Cleanup Required
This article should be cleaned-up to follow the content standards in the Wiki Guide. More info.

This document presents (almost) the minimum amount of work required to enable a serial console login on an Ubuntu 6.06 and later versions. (Minor changes have been added to improve performance.) Both server and client settings are included.

This procedure was developed using the Remote Serial Console HOWTO (see «External links» below), and adapted to apply specifically to Ubuntu. The reader is referred to this document for any issues arising from using this HOWTO.

Assumptions

You have enabled the serial console in your BIOS. 1

  • The serial connection is being made at 115200 baud 8n1, on first serial port, called /dev/ttyS0 in linux (9600 8n1 is the default fall back if your hardware does not support 115200 baud)
  • You are comfortable editing critical system files such as /etc/inittab, /boot/grub/menu.lst
  • You are using a serial (null modem) cable. It is also possible to use a USB to Serial adaptor, but the tty* must be changed to reflect your hardware.
  • You have an available serial console on ttyS0. If your not getting any output, a real serial port or other device might be using ttyS0. Try using ttyS1, ttyS2, etc.
  • If you want to use a standard Ethernet/RJ-45 cable for serial connection you can buy a couple of Serial to Cat 5 adapters or make one yourself.

    Server Setup

    Configuring the console login process

    This section details how to configure the ‘getty’ process to enable a login via the console port. You need to configure either an Upstart system or the older inittab, depending on Ubuntu version you are using.

    Configuring upstart (Karmic and newer)

    1) Create a file called /etc/init/ttyS0.conf containing the following:

    2) Ask upstart to start the getty

    Configuring upstart (Edgy/Feisty/Jaunty)

    Create a file called /etc/event.d/ttyS0 containing the following:

    Configuring inittab (only Dapper and older !)

    1) Edit /etc/inittab

    2) Change the following line:

    At this point, a new login prompt should appear on the output of the serial console.

    Configuring grub

    This section details how to get grub talking via the serial port.

    This section is optional if the user does not want grub interaction via the serial console port.

    Configuring (Karmic and newer)

    1) Edit /etc/default/grub

    Configuring grub (Edgy/Feisty/Jaunty)

    1) Edit /boot/grub/menu.lst:

    2) Add the following lines to the top of the file:

    3) When you next reboot, the output from grub will go to the normal console unless input is received from the serial port. Whichever receives input first becomes the default console. This gives you the best of both worlds.

    Configuring the kernel boot parameters

    This section details how to configure the kernel boot parameters to get boot information through the console port.

    This section is optional if the user does not want the kernel boot messages to appear on the serial console port.

    The following procedure can be carried out by modifying the ‘kernel’ line in grub prior to committing the changes directly to the /boot/grub/menu.lst file.

    1) Edit /boot/grub/menu.lst:

    2) Modify the kernel line for the image you want to boot using the serial console on. In this case, I’m setting up the default 2.6.10-5.386 kernel to use the serial console line. Change:

    Note two «console=» kernel options. You can specify this option several times. All devices, mentioned in it will receive kernel messages (those, generated by printk() and seen by dmesg). However, stdin/stdout/stderr of /sbin/init process will be set to the last device only, therefore only the last device will show startup messages and act as a console in single-user mode.

    Читайте также:  Windows server add dns server

    3) Reboot into this kernel. Output from the boot process should be sent via the serial console line.

    Client Setup

    1) Ensure you have a read/write permissions on /dev/ttyS0.

    if the last command didn’t show an output add yourself to dialout group and logout/login:

    Alternatively, you can always run minicom through sudo, but it’s not recommended.

    2) Install minicom

    3) Configure minicom.

    4) Configure client serial port settings: In Serial port setup, set the following options

    4b) Using 7.10 on the server, I needed to set the following on the client:

    My 7.10 client and Windows’ HyperTerminal both defaulted to Yes; until I changed this client -> server communication did not work.

    5) Configure Initialization string: In Modem and dialing clear the init

    6) Save setup as dfl

    7) You might need to press enter several times to get the connection running.

    8) To log on in the future, run

    and press enter several times if it does not come up on start up.

    Alternative serial client: screen

    GNU screen actually makes quite a capable serial terminal.

    (adjust to requirements)

    To end the session, use Ctrl-A,Shift-K.

    This is only needed if you plan to use serial console to enter BIOS configuration utility or observe early startup messages even before GRUB starts. Note, that in some cases it may interfere with GRUB settings described below. If you’re sure you’ve configured GRUB correctly, but the serial menu does not appear, try disabling serial console support in BIOS. (1)

    SerialConsoleHowto (последним исправлял пользователь tj 2018-11-05 10:36:54)

    The material on this wiki is available under a free license, see Copyright / License for details
    You can contribute to this wiki, see Wiki Guide for details

    Источник

    Работа с последовательным портом (serial-портом)

    Это утверждённая версия страницы. Она же — наиболее свежая версия.

    Содержание

    Serial-порты в контроллере Wiren Board

    Реализация

    Полное описание читайте в документации, вот выжимка из неё:

    • В serial-порт можно посылать данные и получать данные из него.
    • В ОС Linux serial-порты — это псевдофайлы из папки /dev . Например, в контроллерах Wiren Board это могут быть /dev/ttyGSM , /dev/ttyRS485-1 , /dev/ttyUSB0 — у всех в названии есть tty .

    Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство:

    • Скорость в битах в секунду, самое популярное — 9600 бит/с.
    • Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит.
    • Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах.

    Определение занятости порта и монопольное использование

    Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.

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

    Проверим, свободен ли порт /dev/ttyRS485-2 . Для этого выполните команду:

    Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт.

    В контроллерах Wiren Board порты /dev/ttyRS485-1 и /dev/ttyRS485-2 обычно заняты драйвером wb-mqtt-serial . Перед работой с этими портами — остановите драйвер одним из способов:

    • Остановить драйвер из командной строки.
    • В веб-интерфейсе контроллера, в настройках serial-порта снять галочку Enable port и сохранить настройки.

    Программы для работы с serial-портом

    • PuTTY for Mac OS X
    • терминальный клиент cu : cu -s 115200 -l /dev/usbmodem00001
    • Вы не можете использовать программы из этой статьи — посмотрите этот список программ.
    • Serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты modbus_client.
    • Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из Serial-Programming-HOWTO.

    Источник

    Заметки о Linux, электронике, радиолюбительстве

    Личный блог Вадима Кузнецова, RA3XDH

    воскресенье, 27 июля 2014 г.

    Работа с последовательным портом из консоли Linux

    В предыдущем посте было показано как запустить UART на отладочной плате Launchpad для MSP430. Теперь рассмотрим как общаться с платой при помощи средств командной строки Linux. Используется плата с прошивкой из предыдущего поста. Для подробностей — см. под кат

    Читайте также:  Как отключить каталог windows

    Как известно, все устройства последовательных портов представлены файлами устройств в каталоге /dev.Через эти файлы и происходит общение ОС Linux с внешним устройством на последовательном порту. Чтобы передать что-то на внешнее устройство нужно записать данные в файл устройства, а чтобы считать информацию из устройства — прочитать данные из файла устройства. Это можно делать при помощи команд cat и echo так же как для обычных файлов на диске. Или внутри программы на С при помощи вызовов ioctl(), read() и write() или библиотеки termios.

    Физическим последовательным портам RS232, к которым подключались диалапные модемы на старых компьютерах, соответствуют файлы устройств /dev/ttyS*, начиная с /dev/ttyS0. Виртуальным последовательным портам, которые создаются различными конвертерами USB UART соответствуют файлы устройств /dev/ttyUSB* и /dev/ttyACM*. Ядро Linux автоматически разпознаёт подключенное устройство, загружает для него драйвер и создаёт файл устройства. Вручную устанавливать драйвер, как в ОС Windows не требуется. Например, если подключить к USB преобразователь USB UART FT232, то создаётся файл устройства /dev/ttyUSB0, с которым можно работать также как и с обычным последовательным портом. На плате Launcpad находится микросхема TUSB3410, которая тоже представляет собой конвертер USB UART. Если подключить её к USB, то создаётся файл устройства /dev/ttyACM0. Чтобы общаться с платой нужно что-либо писать/читать с этого файла.

    Чтобы пользователь мог читать или писать в файл устройства последовательного порта, его нужно добавить в группу dialout. Иначе работать с последовательным портом сможет только администратор root.

    Простейшим приложением с графическим интерфейсом, которое работает с последовательным портом, является CuteCOM. Он обычно уже есть в вашем дистрибутиве Linux. Его можно установить из репозиториев. При помощи CuteCOM мы работали с платой в предыдущем посте. Выглядит CuteCOM вот так:

    Работать с ним крайне просто. Указываем нужное устройство, если его нет в списке, то его можно впечатать вручную. Затем указываем скорость и параметры и нажимаем OpenDevice. В окне видим данные, которые пришли от устройства. В поле ввода в нижней части можем печать строку символов, которые предаются на устройство. Чтобы передать данный нажимаем Enter и смотрим ответ устройства в окне.

    Теперь рассмотрим как работать с COM-портом из командной строки. Для этого служат три команды: stty, cat и echo.

    Команда stty устанавливает параметры и скорость COM-порта. Её формат:

    stty -F

    Чтобы установить параметры для платы Launchpad для соединения на скорости 9600 нужно выполнить:

    $ stty 9600 -F /dev/ttyACM0 raw -echo

    Параметр raw устанавливает, что данные в компьютер передаются байт за байтом так же как приходят в порт без преобразований. Аппаратное управление потоком отключено. Подробнее о том, что включает и выключает raw — см. man stty. Если не включить raw, то скорее всего ничего работать не будет.

    Теперь в той же консоли нужно набрать

    $ cat /dev/ttyACM0

    И можно смотреть данные, которые приходят от платы. Выход — нажать Ctrl+C.

    Теперь нажимаем на плате RESET и видим, что в консоди напечатался текст.

    Чтобы передать в плату данные, в другой консоли нужно использовать команду echo и перенаправление вывода в файл устройства. Наберём в другой консоли:

    $ echo "1">/dev/ttyACM0

    Видим, что на плате загорелся красный светодиод и в первой консоли было выдано сообщение об этом. Чтобы убрать конец строки в передаваемых данных, то нужно использовать запуск echo -n, а чтобы интерпретировать 16-ричные коды — нужно echo -e. Ключи можно комбинировать.

    В итоге должно получиться так:

    Чтобы увидеть 16-ричные коды данных, приходящих от устройства, нужно использовать команду hexdump:

    $ cat /dev/ttyACM0|hexdump -C

    Получится вот так:

    Чтобы иметь вывод данных от устройство на экран и в текстовый файл нужно использовать tee:

    Источник

    Работа с COM-портом (RS-232) в Linux

    Урок посвящен интерфейсу RS-232, который в простонародье называют COM-порт. Мы разберемся как он представлен в Linux, какой у него интерфейс, научимся его конфигурировать, а также узнаем, что написание программы для коммуникации через COM-порт в Linux не представляет сложности.

    Разговор o коммуникации через COM-порт в Linux следует начать с того, что заметить, что каждому COM-порту в операционной системе соответствует файл устройства телетайп или tty. Он находится в каталоге dev и имеет имя /dev/ttyS и номер. Если посмотреть на мой каталог, то мы увидим следующее, что у меня таких файлов очень много [0:55]. Но по факту, в моем компьютере есть один физический COM-порт. Давайте попробуем его найти. Сделать это можно с помощью команды dmesg, которая выводит сообщения с момента инициализации системы. Если набрать

    Читайте также:  Album player для windows

    $dmeg | grep «ttyS»

    то мы увидим, что, в действительности , у меня только один файл ttyS4 связанный с конкретным COM-портом, у которого есть некоторый диапазон ввода/вывода, номер прерывания, и который сейчас настроен на скорость обмена 150200 бит в секунду (или бод).

    Для того, чтобы сконфигурировать мой COM-порт по умолчанию в Linux можно воспользоваться программой mincom, запускать её нужно от суперпользователя, либо добавить текущего пользователя в группу dialout. Запустим

    $sudo minicom -s

    Ключ -s – обозначает конфигурацию (setup),

    Здесь мы видим следующее [2:24]. Есть параметры последовательного порта, важно прописать правильно файл, то есть указать тот файл, который у вас в системе связан с физическим COM-портом, Второй важный момент – это настройка параметров обмена (ключ Е). Дело в том, что корректный обмен данными по последовательному соединению возможен только тогда, когда обе стороны имеют один и тот же набор параметров. В этом окне можно набор этих параметров менять [3:08]. Мы видим, что у нас задана скорость 8 бит, нет контроля четности, и один стоповый бит. Именно здесь можно это все увидеть и настроить так, как требуется или, как требует ваше устройство.

    Сохраняем конфигурацию по умолчанию. Дальше будем взаимодействовать — сначала с помощью команды терминала, чтобы проверить, как вручную это работает; а потом напишем небольшую программу, которая будет слать данные в COM-порт. Выйти из Mincom можно набрав ctrl-A-X.

    Для того чтобы проверить, как работает COM-порт можно воспользоваться программой miniterm [4:03]. Я создал виртуальную машину с обычным linux, у неё указал, что в наличии имеется один COM-порт (это COM1), по умолчанию назначились линии обработки запросов прерывания. Я ассоциировал этот COM-порт с файлом на моей host-машине. С этого файла мы будем читать данные записанные в порт.

    Итак, мы видим, что в левой части экрана у нас есть логин на виртуальную машину [4:46]. Давайте проверим с помощью minicom -s, как настроены коммуникации. Проверим, что /dev/ttyS0 – это действительно правильный физический порт – да, это именно так. Теперь мы можем вызвать команду

    $sudo miniterm

    она говорит, что есть следующие доступные порты, и просит ввести, через какой порт работать. Далее я попадаю терминал, связанный с COM-портом, где могу набирать текст. Набирая команды, я вижу «эхо» в моем файле справа. Обратите внимание, что я пишу в левом окне, а на экране надпись мы видим в правом. В левом окошке – виртуальная машина, на которой настроен порт. В правом – тот лог, который мы видим в файле ассоциированном с этим COM-портом на host-машине.

    Создадим какой-нибудь каталог, в котором будем разрабатывать приложение. Как это ни странно, приложение будет выглядеть очень просто, потому что все действия, которые мы делаем с COM-портом в linux, это действия с файлами с использованием тех же самых файловых операций. Нам потребуется stdio.h, unistd.h, чтобы получить доступ – функциям open/read/write, fcntl.h, чтобы иметь возможность использовать файловые флажки. Открываем файловый дескриптор, COM-порт, имя, и флаги из COM-порта. Проверим, что файловый дескриптор у нас открылся, то есть если порт меньше или равен 0, то есть какая-то ошибка, оповестим об этом пользователя и вернем управление. В противном случае, можно писать в этот файловый дескриптор. write принимает файловый дескриптор, указатель на буфер, размер. Дальше мы закрываем файловый дескриптор и возвращаем управление. Приложение готово.

    Теперь давайте попробуем запустить то, что у нас вышло, вернее, скомпилировать и запустить [10:40]. При запуске приложения произошла ошибка, но она вызвана понятными причинами, потому что пользователь должен был быть включен группу dialout [11:03], или нам надо запускать приложение от суперпользователя. Сделаем это. И сразу видим, что в нашем окошке появилась запись «hello world». Можно повторить и увидеть, что все работает корректно.

    Точно таким же образом можно осуществлять чтение из COM-порта, то есть использовать не функцию write, а функцию read.

    Источник

    Оцените статью