Linux serial port programs

How To Check and Use Serial Ports Under Linux

Display Detected System’s Serial Support Under Linux

Simple run the dmesg command:
$ dmesg | grep tty

A note about USB based serial ports

USB to RS232 adapter cable connects from the USB port of a computer to a device. Such serial to USB adapter connects to devices for configuration or programming under Linux. Here is what the dmesg command displays when you enter USB adapter:
$ dmesg
## use grep command/egrep command to filter out USB devices ##
$ dmesg | grep -i serial
$ dmesg | grep -i FTDI

Listing and using USB serial ports on Linux

Here is how it looks when I attached USB device:
$ sudo dmesg | more

Use the setserial command to check and use serial ports

The setserial is a program designed to set and/or report the configuration information associated with a serial port. This information includes what I/O port and IRQ a particular serial port is using, and whether or not the break key should be interpreted as the Secure Attention Key, and so on.

Debian/Ubuntu Linux install setserial using the apt-get command/apt command

$ sudo apt install setserial

CentOS/RHEL/Oracle Linux install setserial using the yum command

$ sudo yum install setserial
Fedora Linux user try the dnf command:
$ sudo dnf install setserial

Using setserial to list serial ports and devices

Now we installed required package. Open the termial and then type the following setserial command:
$ setserial -g /dev/ttyS[0123]
If you get an error/warning that reads as “Permission denied,” try running the command as the root user. For example, I am running it using the sudo command/su command:
$ sudo setserial -g /dev/ttyS[0123]

The setserial with -g option help to find out what physical serial ports your Linux box has.

Listing or displaying USB serial ports on Linux

Try:
$ sudo setserial -g /dev/ttyUSB[01]

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

Linux serial console programs

Once serial ports identified you can configure Linux box and use serial ports using various utilities:

  1. minicom– The best friendly serial communication program for controlling modems and connecting to dump devices
  2. wvidial or other GUI dial up networking program – a PPP dialer with built-in intelligence.
  3. Screen Command: Set Baud Rate [ Terminal Communication ]
  4. getty / agetty – agetty opens a tty port, prompts for a login name and invokes the /bin/login command.
  5. grub / lilo configuration – To configure serial port as the system console

Cocnlusion

You learned how to list or check serial ports including USB based adptor on Linux.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via

Category List of Unix and Linux commands
Documentation help • mandb • man • pinfo
Disk space analyzers df • duf • ncdu • pydf
File Management cat • cp • less • mkdir • more • tree
Firewall Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04
Linux Desktop Apps Skype • Spotify • VLC 3
Modern utilities bat • exa
Network Utilities NetHogs • dig • host • ip • nmap
OpenVPN CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04
Package Manager apk • apt
Processes Management bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop
Searching ag • grep • whereis • which
Shell builtins compgen • echo • printf
Text processing cut • rev
User Information groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w
WireGuard VPN Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04

Comments on this entry are closed.

I don’t know if this is the place, but I’m looking for information that is similar. I have 2 machines setup through a null modem. I want to read through the com port from one machine to the other. The sending machine is running Windows sending through COM1: and the receiving computer is Linux Red Hat. Any help on this would be appreciated.

You can use pyserial ,its a python package,can be used to read and write in serial ports

another simple serial console program not mentioned is gtkterm.

I want to advise you that probably there is an error in the last sentence “seserial with -g option help to find out what physical serial ports your Linux box has.”; isn’t it setserial?

I have 4 standard serial ports defined, /dev/ttyS0-4, but I added a PCI-E 16 port serial adapter, and I have not found a way to connect anything to the upper 16 ports.
How do you create the virtual links? what options do you give setserial to define the new ports?

it dosn’t work 🙁 I can’t connect to my ASA using debian.

Daemon is a program called getty used by UNIX/Linux systems. There are many different versions of getty. The first modem detected is /dev/ttys0 or /dev/ttys1. To create a link to the devices file so that you can view modem information. Type ln -s /dev/ttys1 /dev/modem.
It is essential to set the modem to AUTO ANSWER using getty.

download minicom from alioth.debian.org/projects/minicom.

create a modem config file by entering minicom -s from the root command line
select the options you want to configure using AT commands
connect to the modem by typing in minicom

Thanks very useful..save my time 🙂

Hi,everybody
I have a serial PCI card with two ports but neither of them is working, on Linux fedora 16. I have tried using “gtkterm” and “minicom” but unfortunately I can’t make a serial connection to my Cisco lab. Here is my output when I issue the command: “setserial -g /dev/ttyS[0123]”.

/dev/ttyS0, UART: 16550A, Port: 0xec00, IRQ: 16
/dev/ttyS1, UART: 16550A, Port: 0xe880, IRQ: 16
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

also I want to mention that when I try to connet throught the terminal it generates a message like so: ” Cannot open /dev/ttyS0: Permission denied”.
any help please.
abdel

Check the permissions on /dev/ttyS0… Likely problem is it’s owned by root, and is part of the uucp group. Add yourself to the uucp group, and all should be better. I’m curious to know if this is enough for you as I am having problems communicating with a serial port on Linux as well. I got past the permissions stuff, but it is still not working.

Thanks Tom,
I actually I tried but it’s does not work, still says “permission denied”. I would appreciate if you explain to me step by step the procedure how to do it, I’m knew to Linux.
Best Regards
Abdel

1) ls -la /dev/ttyS0 — This will report the permissions on the port. Typically, this will say crw-rw—- 1 root uucp. The “c” in the string indicates that it’s a “character device” the first “rw” indicates that the owner has read/write permission. The second “rw” means that the group has read/write permissions. The “—” indicates that the rest of the world has no permissions. After the “—-“, “root” indicates that the owner of the device is root, and that the group id is “uucp”. So, you either need to be root, or a member of the uucp group to have read/write access to the port.

2) To add yourself to the uucp group (to get read/write access), you need to edit the file /etc/group, and add your user name to the line that begins with “uucp:” User names are separated by commas, so add a comma, then your user name to the end of the line. You will need root permissions to edit this file.

3) log out, and log back in because group associations are made at login time, and are not queried on each request.

Thanks Tom,
here is my output from the group file I have added my username to it but does not work.

I will just give up.Thanks a lot for your help I relay appreciate it.

Your entry in /etc/group is incorrect. If you read my previous post, I said to add your user id to the line that _begins_ with uucp. You added uucp to the group of users that can access your account. You want an entry in the /etc/group file that looks something like:

The critical element is that it’s the line that begins with uucp

It works. I just add my username to ” dialout ” and it worked fine. Iwould like to thank you for you time and support.

Best Regards
Abdel

hi,
I have connected the SIM300(gsm model) to my pc running ubuntu. I need a code to send a AT command to the GSM module and it should read and display the reply.
Please let me know steps.
I tried so many methods and codes, but no use…

i need C code(program).

all my ttyS* shows unknown, earlier it was working fine, now it doesnt recognise

setserial -g /dev/ttyS*
/dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

#cat /etc/redhat-release
CentOS Linux release 6.0 (Final)

#dmesg | grep tty
console [tty0] enabled

can u pls help me

tried spending time in google two days, still no success, tried connecting a brand new device too, still no success.

Sorry, but that second sentence is not necessarily true. I have a PC with two dual com port adapters. Windows sees them as COM1 -> COM4 (there is no built in COM port). Linux sees them as /dev/ttyS4->/dev/ttyS7.

/dev/ttyS0-/devttyS3 are apparently reserved, exist whether or not a physical port exists, and /dev/ttyS0 for certain is “special” in that it is used by the default terminal window:

I think minicom still superior to other console utility.

Hi All tried all of the above and still get permission denied . HELP
Kevin

/bpq$ setserial -g /dev/ttyS[012345657

/bpq$ setserial -g /dev/ttyS[012345657]

sudo setserial -g /dev/ttyS1

Hiiiiiiiii
Please help me
i am install minicom and use serial modem sim300 v7.03 but there is problem to type AT cmd on minicom console…….

Edgeports are very easy to use the firmware is on Ubuntu they are from 2 ports to 16+ I bought my last two of them on ebay.
Jim

Hi all..
I got problem to connect with my USB serial port,
i already create
ln -s /dev/ttyUS0

and check dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 7.722004] systemd[1]: Created slice system-getty.slice.
[ 3659.524452] usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 4850.183339] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 4857.907567] usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
when running SDNC program and select com1 will shown “port is already in use”

hi, have are you\
i have a problem with machine xnc . old version sistem operating linux,
pc removed battery cmos . but change battery do it so machine different data serial port linux dont recognized machine.
how can you slove this problem
your help wil be welcome

Источник

Linux.yaroslavl.ru

Peter Baumann
Русский перевод А.Гавва (2002 г.Львов).


Revision History
Revision 1.01 2001-08-26 Revised by: glf
New maintainer, converted to DocBook
Revision 1.0 1998-01-22 Revised by: phb
Initial document release

Этот документ описывает как программировать связь с устройствами подключенными к последовательным портам компьютера под Linux.

Этот документ называется Linux Serial Programming HOWTO. Здесь описывается как программировать связь с другими устройствами/компьютерами через последовательную линию под Linux. Рассматриваются различная техника: Канонический ввод/вывод (прием/передача только полной строки), асинхронный ввод/вывод и ожидание ввода от различных источников.

Это — первое обновление начального релиза Linux Serial Programming HOWTO. Первичное назначение этого обновления — изменение авторской информации и конвертирование документа в формат DocBook. Относительно технического содержимого, на данный момент времени, изменений очень мало. Подчистка технического содержимого не может быть произведена за одну ночь, но я буду работать над этим когда мне позволит время.

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

Все примеры тестировались при использовании i386 Linux Kernel 2.0.29.

This document is copyrighted (c) 1997 Peter Baumann, (c) 2001 Gary Frerking and is distributed under the terms of the Linux Documentation Project (LDP) license, stated below.

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

If you have any questions, please contact

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

Все авторские права сохраняются за соответствующими владельцами, пока не будет указано обратное. Использование терминов в этом документе не дожно иметь отношение к нарушению любых торговых или сервисных марок.

Наименование определенных продуктов или брэндов не должно рассматриваться как индоссамент (передаточная надпись).

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

Как указывалось ранее, здесь мало изменений касающихся технического содержимого.

Автор благодарит Mr. Strudthoff, Michael Carter, Peter Waltenberg, Antonino Ianella, Greg Hankins, Dave Pfaltzgraff, Sean Lincolne, Michael Wiedmann, и Adrey Bonar.

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

Лучший способ отладки вашего кода — это установка другой системы с Linux, и подключение двух компьютеров через нуль-модемный кабель. Используйте miniterm, который доступен из руководства программиста LDP( ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gz в каталоге примеров ) для передачи символов на вашу систему Linux. Miniterm может быть легко скомпилирован и будет передавать необработанный клавиатурный ввод через последовательный порт. Должно быть проверено только предложение объявления #define MODEMDEVICE «/dev/ttyS0» . Установите его в ttyS0 для COM1, ttyS1 для COM2, и т.д.. Это необходимо для проверки того, что все символы передаются в raw виде (без предварительной обработки) по последовательной линии. Для проверки вашего подключения, запустите miniterm на обоих компьютерах и просто попечатайте на клавиатуре. Символы введенные на клавиатуре одного компьютера должны появляться на экране другого компьютера и наоборот. Эхо ввода не будет появляться на локально подключенном экране.

Для создания нуль-модемного кабеля вам необходимо перекрутить линии TxD (передача) и RxD (прием). Описание кабеля см. в секции 7 Serial-HOWTO.

Выполнение такой проверки также возможно при использовании только одного компьютера, если вы имеете два неиспользуемых последовательных порта. Таким образом, вы можете запустить два miniterm на двух виртуальных консолях. Если вы освободили последовательный порт отключением мышки, то, если присутствует /dev/mouse , не забудьте его перенаправить. Если вы используете многопортовую последовательную плату, убедитесь в том, что вы ее правильно сконфигурировали. Я сам плохо сконфигурировал свою многопортовую последовательную плату и все было хорошо пока я работал на моем собственном компьютере, но когда я подключился к другому компьютеру, последовательный порт начал терять символы. Кроме того, запуск двух программ на одном компьютере не всегда может быть полностью асинхронным.

Устройства /dev/ttyS* предпологаются для подключения терминалов к вашей системе Linux и конфигурируются для этого во время запуска системы. Об этом необходимо помнить при программировании связи непосредственно через последовательные порты. Например, порты могут быть сконфигурированы во время запуска системы таким образом, что они возвращают «эхо» вводимого символа обратно, что обычно должно быть изменено при передаче данных.

Все параметры могут быть легко сконфигурированы из программы. Конфигурация сохраняется в структуре struct termios , которая объявлена в :

Этот файл также содержит все объявления флагов. Флаги режима ввода в c_iflag управляют всей обработкой ввода, которая подразумевает что символы посылаемые от устройства могут быть обработаны перед тем как они будут прочитаны вызовом read . Аналогично c_oflag управляет обработкой вывода. c_cflag содержит следующие установки для порта: скорость передачи данных, число битов в передаваемом символе, число стоп-битов, и т.д. Флаги локального режима храняться в c_lflag и определяют будет-ли производиться «эхо» для вводимых символов, какие сигналы будут посылаться программе, и т.д. В заключение, массив c_cc описывает управляющие символы для конца файла, остановки передачи, и т.д. Значения по умолчанию для управляющих символов описаны в . Флаги описываются в странице руководства (man page) termios(3) . Структура termios содержит c_line (дисциплина линии) элемент, который не используется в POSIX-совместимых системах.

Здесь будут представлены три различных концепции ввода. Для определенного приложения должна быть выбрана подходящая концепция. Если возможно, то не зацикливайте чтение одиночного символа для получения целой строки. Когда я так делал, я терял символы, в то время как read для целой строки не показывал ни одной ошибки.

Это нормальный режим обработки для терминалов, но он также может быть полезен для коммуникации с другим dl вводом, обрабатываемым построчно, что подразумевает что read будет возвращать полнострочный ввод. Строка, по умолчанию, заканчивается NL (ASCII LF ), символом конца строки или символом конца файла. Символ CR (по умолчанию, символ конца строки для DOS/Windows) не будет завершать строку при установках по умолчанию.

Обработка канонического ввода может также обрабатывать очистку, удаление слова, и перепечатку символов, транслировать CR в NL , и т.д.

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

Два режима описанных выше могут быть использованы в синхронном и асинхронном режиме. Синхронный режим устанавливается по умолчанию, при этом вызов read будет заблокирован до тех пор пока операция чтения не будет завершена. В асинхронном режиме вызов read возвращает управление немедленно и посылает сигнал вызвавшей программе после завершения операции чтения. Этот сигнал может быть принят сигнальным обработчиком.

Эта ситуация не является отдельным режимом ввода, но может быть полезно если вы манипулируете несколькими устройствами. В моем приложении я управлял вводом через TCP/IP сокет и вводом через последовательное соединение с другим компьютером квази-последовательно. Пример программы показанный ниже будет ожидать ввод от двух источников ввода. Если ввод от одного из источников становится доступным, он будет обработан, и, затем, программа будет ожидать новый ввод данных.

Подход показанный ниже выглядит сложно, но необходимо не забывать о том, что Linux — это многозадачная операционная система. Системный вызов select не будет загружать процессор (CPU) при ожидании ввода, в то время как цикл ожидания пока ввод станет доступен будет замедлять одновременное выполнение других процессов.

Все примеры программ порождены из miniterm.c . Размер приемного буфера ограничен 255 символами, подобно максимальной длине строки при обработке канонического ввода (
или

Смотрите комментарии в коде которые объясняют использование различных режимов ввода. Я надеюсь что этот код понятен. Пример для канонического ввода откомментирован прекрасно, другие примеры откомментированы только там где они отличаются от примера для канонического ввода для того чтобы подчеркнуть различия.

Описания — не полны, но это поощряет вас поэкспериментировать с примерами для получения наилучшего решения для вашего приложения.

Don’t forget to give the appropriate serial ports the right permissions Не забудьте предоставить правильные привелегии доступа к соответствующему последовательному порту (например: chmod a+rw /dev/ttyS1 )!

В режиме обработки неканонического ввода, не производится построчная сборка ввода и обработка ввода (очистка, удаление слов, и т.д.) не производится. Два параметра управляют поведением этого режима: c_cc[VTIME] устанавливает символьный таймер, и c_cc[VMIN] устанавливает минимальное количество символов которые необходимо принять для удовлетворения операции чтения.

Если MIN > 0 и TIME = 0, то MIN устанавливает количество символов которые необходимо принять для удовлетворения операции чтения. Так как TIME установлено в нуль, то таймер не используется.

Если MIN = 0 и TIME > 0, то TIME служит как значение таймаута. Операция чтения будет удовлетворена если будет прочитан одиночный символ, или TIME будет превышен (t = TIME *0.1 s). Если TIME превышено, то не будет возвращено ни одного символа.

Если MIN > 0 и TIME > 0, то TIME служит как межсимвольный таймер. Операция чтения будет удовлетворена если будет принято MIN символов, или время между передачей двух символов достигло TIME. Таймер рестартует каждый раз при приеме нового символа и активируется после приема первого символа.

Если MIN = 0 и TIME = 0, то чтение будет удовлетворено немедленно. При этом операция чтения вернет число фактически доступных символов или число запрошенных символов. Согласно Antonino (см. содействие), вы можете выдать fcntl(fd, F_SETFL, FNDELAY); перед чтением для получения таких же результатов.

При модификации newtio.c_cc[VTIME] и newtio.c_cc[VMIN] могут быть проверены все режимы описанные выше.

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

Вызов select и сопутствующие макросы используют fd_set . Это битовый массив, который имеет определенный бит для каждого правильного/существующего номера файлового дескриптора. select будет принимать fd_set с установленными битами для соответствующих файловых дескрипторов и возвращать fd_set , в котором биты, соответствующие файловым дескрипторам, установлены когда произошел ввод, вывод, или исключение. Вся обработка fd_set выполняется с помощью предусмотренных макросов. Обратитесь к странице руководства (man page) select(2) .

Данный пример производит блокировку на неопределенное время, до тех пор, пока данные от одного из источников ввода не будут доступны. Если вам необходим таймаут ввода, то измените вызов select как указано ниже:

Этот пример будет «вываливаться» в таймаут через 1 секунду. Если произошел таймаут, то вызов select будет возвращать 0, однако позаботьтесь чтобы Timeout определялся временем актуального ожидания ввода в select . Если значение таймаута — нуль, то вызов select будет возвращать управление немедленно.

Linux Serial-HOWTO описывает как установить и сконфигурировать последовательные порты, а также содержит дополнительную информацию об оборудовании.

Справочная страница руководства (man page) termios(3) описывает все флаги для структуры termios .

Источник

Читайте также:  Как очистить весь мусор linux mint
Оцените статью