ARV опять отлично проявил свое нежелание читать документацию!
В директории /dev динамические файлы создаются udev'ом. Как только устройство подключили или отключили, udev читает правила из /etc/udev/rules.d. И туда можно запихнуть свое правило. Например, COKPOWEHEU нашел вот такой оригинальный подход:
Код: Выделить всё
cat /etc/udev/rules.d/99-myHW.rules
ACTION=="add", DRIVERS=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}"
ACTION=="add", ENV{USB_IDS}=="067b:2303", ATTRS{interface}=="?*", PROGRAM="/bin/bash -c \"ls /dev | grep $attr{interface} | wc -l \"", SYMLINK+="$attr{interface}%c", MODE="0666", GROUP="tty"
ACTION=="add", ENV{USB_IDS}=="0483:5740", ATTRS{interface}=="?*", PROGRAM="/bin/bash -c \"ls /dev | grep $attr{interface} | wc -l \"", SYMLINK+="$attr{interface}%c", MODE="0666", GROUP="tty"
И я тоже им пользуюсь. Крайне удобно, когда у тебя, скажем, 7 USB-CDC "в одном флаконе", и нужно их как-то различать. Или элементарно различать "одноинтерфейсные" изделия с одинаковыми VID/PID. Просто нужно при запросе iInterface выдавать ненулевой номер. А при запросе дескриптора с этим номером - выдавать его. Сохраняю дескрипторы в flash и пользователь может поменять название, что очень удобно.
А еще, напомню, есть библиотеки libusb и libudev. Все те же самые действия можно выполнять в своей утилите. Но это неудобно, т.к. придется писать отдельный софт вместо того, чтобы открыть любой терминальный клиент (хоть мой
tty_term).
Короче, в 100500-й раз тебе говорю (как и говорил под предыдущим ником, который, увы, забанили): читай документацию!
Что до определения, какой из "/dev/ttySx" - "настоящий", просто от рута выполни 'cat /proc/tty/driver/serial'. Вот, у меня так:
Код: Выделить всё
cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
Видно, что на "матери" есть лишь один настоящий порт и три "потенциальных".
А вот так - на "промышленном компьютере":
Код: Выделить всё
ssh root@robotel5 cat /proc/tty/driver/serial
X11 forwarding request failed on channel 0
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 DSR
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0
2: uart:16550A port:000003E8 irq:7 tx:0 rx:0
3: uart:16550A port:000002E8 irq:5 tx:0 rx:0
4: uart:16550A port:00000228 irq:10 tx:0 rx:0
5: uart:16550A port:00000238 irq:11 tx:0 rx:0
6: uart:unknown port:00000000 irq:0
7: uart:unknown port:00000000 irq:0
8: uart:unknown port:00000000 irq:0
9: uart:unknown port:00000000 irq:0
10: uart:unknown port:00000000 irq:0
11: uart:unknown port:00000000 irq:0
12: uart:unknown port:00000000 irq:0
13: uart:unknown port:00000000 irq:0
14: uart:unknown port:00000000 irq:0
15: uart:unknown port:00000000 irq:0
16: uart:unknown port:00000000 irq:0
17: uart:unknown port:00000000 irq:0
18: uart:unknown port:00000000 irq:0
19: uart:unknown port:00000000 irq:0
20: uart:unknown port:00000000 irq:0
21: uart:unknown port:00000000 irq:0
22: uart:unknown port:00000000 irq:0
23: uart:unknown port:00000000 irq:0
24: uart:unknown port:00000000 irq:0
25: uart:unknown port:00000000 irq:0
26: uart:unknown port:00000000 irq:0
27: uart:unknown port:00000000 irq:0
28: uart:unknown port:00000000 irq:0
29: uart:unknown port:00000000 irq:0
30: uart:unknown port:00000000 irq:0
31: uart:unknown port:00000000 irq:0
Т.е. шесть реальных из 32 потенциальных.
Ну набери ты в гугле: "linux find real com port", тебе сразу вылезет несколько вариантов действий от ИИ. Вплоть до 'dmesg | grep ttyS'.