
Я использую 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
Эти порты на самом деле существуют на вашей материнской плате. Они просто не подключены к внешнему порту, как в (некоторых) настольных компьютерах.