Як знайти, який серійний порт використовується?


33

Питання:

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

Фон:

Я ніколи не працював із серійним пристроєм, тому вчора, коли з’явилася потреба, я спробував це зробити в Google, але не зміг знайти нічого корисного. Я провів кілька годин у пошуках, і хочу поділитися знайденою відповіддю, оскільки це може бути корисним для когось.


1
Мені подобається використовувати ці біти для виявлення пристрою - я, мабуть, використовуватиму це, хоча у мене багато пристроїв, які використовують лише штифти Tx / Rx, я, можливо, міг би зламати їх, щоб утримувати лінію CTS високо для цього.
Danny Staple

Відповіді:


34

На жаль, послідовні порти не є PlugNPlay, тому ядро ​​не знає, до якого пристрою підключено. Прочитавши навчальний посібник HowTo, я зрозумів, що я працюю.

/dev/Каталог UNIX як операційки містить файли , зазначені в ttySn (з п бути числом) . Більшість з них не відповідає існуючим пристроям. Щоб знайти, які з них виконайте, видайте команду:

$ 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, ttyS4, ttyS5.

Один з них матиме позитивну напругу на підключеному пристрої. Отже, порівнюючи вміст файлу /proc/tty/driver/serialіз пристроєм та без нього, підключений до нього, ми можемо легко знайти ttyS, пов'язані з нашим пристроєм. Отже, тепер зробіть:

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

(не) підключіть пристрій

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

Далі перевірте різницю між двома файлами. Нижче наведено висновок мого ПК:

$ 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

Порівнюючи три числа з виходом dmesg, ми можемо визначити, який з них - порт:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Отже, наш пристрій /dev/ttyS0, місія виконана!


1
Що робити, якщо я не бачу жодного пристрою у виході dmesg?
user3019105

2
@ user3019105 Вибачте, я ніколи не стикався з такою проблемою. З того, що я розумію, dmesgповинно бути повідомлення про присвоєння irq серійному пристрою. І якби цього не було, я б припустив певну технічну проблему. Це лише припущення, і воно може бути помилковим, але якби я налагодив таку проблему, я б розпочав дослідження з думкою про те, що серійний порт повинен був бути ініційований.
Привіт-Ангел

1
Оскільки я переходжу з машини на машину, я визначив псевдонім, щоб показати мені послідовні порти на цій машині. Він працює на сімейних системах Ubuntu з systemd. alias ports = 'інформація o udevadm --export-db | grep -i "^ n: ttyu"'
DDay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.