Как мне узнать, какой последовательный порт использовать в Linux?

Я собираюсь написать программу на C, которая будет открывать соединение через последовательный порт и «прослушивать» входящие команды, а затем предпринимать некоторые действия и сообщать о статусе.

Подключение будет через RS232 (последовательный порт), и я пытаюсь понять, как узнать, какой порт открыть.

При использовании Windows, если я подключаю свое устройство с последовательным USB-портом, я вижу, что в диспетчере устройств отображается «Prolific USB-to-Serial Comm Port (COM4)» ... но на стороне Linux я не вижу никаких изменений в область /sys/class/tty или /dev, я вижу, что ttyS0 - ttyS7 присутствует все время (я предполагаю, что S обозначает серийный номер на основе что я читал).

Итак, как мне узнать, к какому из них подключиться?

РЕДАКТИРОВАТЬ
Пока я разрабатываю это в системе OpenSUSE 12.1 (ядро 3.1), последняя программа будет запущена в uCLinux на плате с ядром 2.4Linux. , поэтому я ищу чистые решения C, которые будут работать на старых ядрах

К вашему сведению: файловая система /sys, как указано в ответе на этот пост не существовал до тех пор, пока не вышло ядро ​​2.6, и мои ограничения вынудили меня придерживаться того, что доступно в ядре 2.4.


person Mike    schedule 04.10.2012    source источник
comment
Скорее всего, ваш адаптер последовательного порта USB будет отображаться как /dev/ttyUSB0. Также проверьте этот вопрос, если вам нужен способ перечисления последовательных портов.   -  person    schedule 05.10.2012
comment
pyserial может здесь помочь.   -  person Prasanth    schedule 05.10.2012
comment
@PhilippeGauthier - Это было бы очень прискорбно, учитывая, что я не знаю, будет ли пользователь использовать последовательный кабель USB- ›или прямой последовательный кабель. :(   -  person Mike    schedule 05.10.2012
comment
@goldenparrot - целевая платформа для этой программы, скорее всего, не будет поддерживать Python. (uCLinux)   -  person Mike    schedule 05.10.2012
comment
@PhilippeGauthier - Проверял эту ссылку, это хорошая идея, но с использованием файловой системы /sys, от которой мне нужно держаться подальше. /sys не появлялся до версии 2.6, и, поскольку мне нужно помнить о совместимости с нашей системой 2.4, я не могу ее использовать. Спасибо хоть!   -  person Mike    schedule 05.10.2012


Ответы (3)


Команда dmesg покажет вам сообщение ядра при подключении модуля, в котором будет указано имя устройства.

Файловая система /proc похожа на диспетчер устройств в Windows - где-то там будет список tty-устройств.

person Martin Beckett    schedule 04.10.2012
comment
Похоже, чтение dmesg подойдет: [ 827.528859] usb 2-2: pl2303 converter now attached to ttyUSB0 Итак, я могу видеть свое устройство на / dev / ttyUSB0, спасибо! - person Mike; 05.10.2012

Я использовал две вещи: (а) ищите линии управления (DTR, DSR и т. Д.) И (б) открывайте «все» порты и выясняйте, какие из них кажутся активными. В последнем случае помогает, если вы можете отправить сообщение на последовательное устройство и получить ответ; очевидно, это работает, только если устройство ответит на сообщение.

person Art Swri    schedule 04.10.2012

Обратите внимание на /proc/tty/driver/serial - вы должны увидеть uart типа 16550A вместо unknown, а rx должен быть> 0 для существующих портов. Если вы должны угадать, какой порт будет использоваться, откройте все доступные порты. После этого вам нужно настроить порт в соответствии с вашими потребностями (скорость передачи, четность, биты и т. Д.) Или попытаться угадать входящую скорость передачи и т. Д.

person ott--    schedule 04.10.2012
comment
А также проверьте /proc/tty/driver/usbserial. - person sawdust; 05.10.2012