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

Вопрос:

Я подключил устройство (например, GSM-модем) через последовательный порт (aka RS-232), и мне нужно посмотреть, с каким файлом в /dev/, это устройство было привязано, чтобы иметь возможность общаться с ним. К сожалению, нет нового файла в /dev/ и не видно ничего в dmesg. Так что это кажется трудным вопросом.

Фон:

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

28 голосов | спросил Hi-Angel 17 AMpThu, 17 Apr 2014 11:50:55 +040050Thursday 2014, 11:50:55

1 ответ


28

К сожалению, последовательные порты не являются PlugNPlay, поэтому ядро ​​не знает, какое устройство было подключено. После прочтения HowTo У меня есть рабочая идея.

Каталог /dev/ unix-подобных ОС содержит файлы с именем ttySn (при этом n число) . Большинство из них не соответствуют существующим устройствам. Чтобы найти, какие из них делать, выполните команду:

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

Выше приведен пример вывода моего ПК. Вы можете увидеть инициализацию нескольких последовательных портов:

ttyS0, ttyS1, ---- +: = 4 =: + ----, ttyS4.

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

/proc/tty/driver/serial

(un) подключить устройство

$ sudo cat /proc/tty/driver/serial> /tmp/1

Затем проверьте разницу между двумя файлами. Ниже приведен вывод моего ПК:

$ sudo cat /proc/tty/driver/serial> /tmp/2

Сравнивая три числа с выходом dmesg, мы можем определить, какой из них представляет собой порт:

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

Следовательно, наше устройство [ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A , миссия выполнена!

ответил Hi-Angel 17 PMpThu, 17 Apr 2014 21:20:30 +040020Thursday 2014, 21:20:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132