Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: MikeОтветов: 3

Я собираюсь написать программу на 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.

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

clinuxserial-port

Ответы

Ответ 1 · рейтинг 3 · Martin Beckett

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

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

Ответ 2 · рейтинг 1 · Art Swri

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

Ответ 3 · ott--

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы