Почему у меня есть /dev/ttyS* на Linux, когда на моем ноутбуке нет последовательного порта/порта RS232/COM1?

Почему у меня есть /dev/ttyS* на Linux, когда на моем ноутбуке нет последовательного порта/порта RS232/COM1?

Я использую Debian Wheezy, и на моем ноутбуке нет последовательного порта. Почему у меня есть /dev/ttyS*, и что произойдет, когда я попытаюсь прочитать/записать на них?

Моя конфигурация:

└──> ll /dev/ttyS*
crw-rw---T 1 root dialout 4, 64 Apr 30 09:21 /dev/ttyS0
crw-rw---T 1 root dialout 4, 65 Apr 30 09:21 /dev/ttyS1
crw-rw---T 1 root dialout 4, 66 Apr 30 09:21 /dev/ttyS2
crw-rw---T 1 root dialout 4, 67 Apr 30 09:21 /dev/ttyS3

└──> sudo 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

└──> stty -g
6d02:5:4bf:8a3b:3:1c:7f:15:4:0:1:ff:11:13:1a:ff:12:f:17:16:ff:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

└──> dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.653544] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.712718] 00:02: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

P.S.:Здесьупоминается случай, когда у пользователя один порт, а в /dev у него 4, а у меня ни одного.

решение1

Весьма вероятно, что порт ttyS0 на самом деле есть на вашей материнской плате. И вполне возможно, что на материнской плате также есть разъем для его использования! Когда я купил свою последнюю плату, я тоже пришел к такому выводу (увидев указанный порт), затем я посмотрел все разъемы в руководстве к плате. Прямого разъема для внешней стороны не было, только небольшой «заголовок». Поэтому я протянул кабель к внешнему разъему db9, и все работает!

Следующие три ( ttyS1-S3) скорее всего НЕ существуют, но перечислены, потому что драйвер последовательного порта проверил их, что является действием по умолчанию во многих Linux. Смотрите страницу руководства для setserial, которая является функцией, вызываемой при загрузке Linux. Там говорится:

Во время обычного процесса загрузки инициализируются только COM-порты 1–4 с использованием портов ввода-вывода и значений IRQ по умолчанию, как указано ниже.

EDIT: Кстати, легко увидеть, ttyS*работают ли они как файлы или нет. Просто попробуйте отправить им что-нибудь консольной командой:

cat <some_short_file> > /dev/ttyS1

вероятно, даст I/O error, потому что нет подключенного драйвера. То же самое для ttyS0будет работать нормально. >Команда в перенаправляет вывод команды catна последовательный порт. cp shortfile /dev/ttyS0тоже работает.

EDIT: ttyS1-S3 физически не там, так что нет, вы не можете их использовать. Есть другие устройства, которые вы можете использовать как виртуальные порты, такие как псевдотерминалы (pty) и устройства loop. ПроверьтеВикипедияистраницы руководства для ptys. Если pty являются символьными устройствами, вы можете использовать циклические устройства для передачи блоков (например, для виртуальных дисков).Википедияидокументация man-страницы.

решение2

Эти порты на самом деле существуют на вашей материнской плате. Они просто не подключены к внешнему порту, как в (некоторых) настольных компьютерах.

Связанный контент