-1

Как мы получаем общее количество физически доступных последовательных портов на машине с Linux.

Есть ли какая-то конкретная команда для этого?

1 ответ1

0

Вы можете использовать команду setserial чтобы получить эту информацию, с флагом -g:

[{0} 20:18:12] $ sudo setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

Это работает при условии, что они правильно настроены, и на устройстве есть ссылка, созданная в /dev /. Это типично, но всегда есть вероятность, что у вас есть какая-то многопортовая последовательная плата, которая выставляет свои последовательные порты нестандартным способом. На этой машине у меня только один физический порт, и тот, который связан с UART типа 16550A; так что вы можете просто отфильтровать вывод с помощью grep:

[{0} 20:18:45] $ sudo setserial -g /dev/ttyS* | grep "16550A"
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

Если вы буквально хотите считать, используйте флаг -c с grep:

[{0} 20:18:45] $ sudo setserial -g /dev/ttyS* | grep -c "16550A"
1

Возможно, вам не нужно использовать sudo; зависит от разрешений на ваших последовательных портах; Я этим не пользуюсь и не менял их. setserial не устанавливается по умолчанию в большинстве дистрибутивов, но должен быть доступен в вашем менеджере пакетов. Если нет, то есть альтернатива (при условии, что ваш журнал dmesg не поворачивал сообщения от загрузки уже).

[{0} 20:19:13] $ dmesg | grep "16550A"
[    0.962785] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Аналогичная опция, если у вас системный дистрибутив:

[{0} 20:19:43] $ sudo journalctl | grep 16550A
Apr 22 20:59:44 lenny kernel: 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .