Как мы получаем общее количество физически доступных последовательных портов на машине с Linux.
Есть ли какая-то конкретная команда для этого?
Как мы получаем общее количество физически доступных последовательных портов на машине с Linux.
Есть ли какая-то конкретная команда для этого?
Вы можете использовать команду 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