Вопрос или проблема
Я недавно приобрел Coolgear USB-32COM-RM 32-портовый адаптер RS-232 USB-serial, подключенный к Thinkpad T490s под управлением Mint 21.3. Вот некоторый вывод lsusb:
# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 04f2:b681 Chicony Electronics Co., Ltd ThinkPad T490 Webcam
Bus 001 Device 118: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 117: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 116: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 115: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 114: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 113: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 109: ID 2109:8887 VIA Labs, Inc. 40AN
Bus 001 Device 108: ID 045e:0047 Microsoft Corp. IntelliMouse Explorer 3.0
Bus 001 Device 112: ID 17ef:3083 Lenovo ThinkPad Thunderbolt 3 Dock USB Audio
Bus 001 Device 110: ID 17ef:3081 Lenovo USB2.0 HUB
Bus 001 Device 107: ID 17ef:3080 Lenovo USB2.0 Hub
Bus 001 Device 106: ID 17ef:3080 Lenovo USB2.0 Hub
Bus 001 Device 003: ID 8087:0aaa Intel Corp. Bluetooth 9460/9560 Jefferson Peak (JfP)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 2: Dev 106, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 1: Dev 107, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 110, If 0, Class=Hub, Driver=hub/2p, 480M
|__ Port 2: Dev 112, If 2, Class=Audio, Driver=snd-usb-audio, 12M
|__ Port 2: Dev 112, If 0, Class=Audio, Driver=snd-usb-audio, 12M
|__ Port 2: Dev 112, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 112, If 1, Class=Audio, Driver=snd-usb-audio, 12M
|__ Port 4: Dev 108, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 5: Dev 109, If 0, Class=, Driver=, 480M
|__ Port 4: Dev 113, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 114, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 117, If 2, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 3: Dev 117, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 3: Dev 117, If 3, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 3: Dev 117, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 1: Dev 115, If 3, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 1: Dev 115, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 1: Dev 115, If 2, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 1: Dev 115, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 4: Dev 118, If 3, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 4: Dev 118, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 4: Dev 118, If 2, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 4: Dev 118, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 2: Dev 116, If 2, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 2: Dev 116, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 2: Dev 116, If 3, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 2: Dev 116, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 8: Dev 2, If 3, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 2, If 2, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 10: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 10: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
Несмотря на то, что это устройство на 32 порта, я вижу только 16 устройств /dev/ttyUSB:
# ls -ld /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Dec 12 23:02 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Dec 12 23:02 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 10 Dec 12 23:02 /dev/ttyUSB10
crw-rw---- 1 root dialout 188, 11 Dec 12 23:02 /dev/ttyUSB11
crw-rw---- 1 root dialout 188, 12 Dec 12 23:02 /dev/ttyUSB12
crw-rw---- 1 root dialout 188, 13 Dec 12 23:02 /dev/ttyUSB13
crw-rw---- 1 root dialout 188, 14 Dec 12 23:02 /dev/ttyUSB14
crw-rw---- 1 root dialout 188, 15 Dec 12 23:02 /dev/ttyUSB15
crw-rw---- 1 root dialout 188, 2 Dec 12 23:02 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 Dec 12 23:02 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 Dec 12 23:02 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 Dec 12 23:02 /dev/ttyUSB5
crw-rw---- 1 root dialout 188, 6 Dec 12 23:02 /dev/ttyUSB6
crw-rw---- 1 root dialout 188, 7 Dec 12 23:02 /dev/ttyUSB7
crw-rw---- 1 root dialout 188, 8 Dec 12 23:02 /dev/ttyUSB8
crw-rw---- 1 root dialout 188, 9 Dec 12 23:02 /dev/ttyUSB9
Почему я вижу только 16 из 32 портов?
Я столкнулся с аналогичной проблемой несколько лет назад; чтобы все 32 порта были распознаны, мне пришлось пройти через несколько препятствий, снизив скорость USB-порта, к которому подключен адаптер.
Я явно не знаю, сработает ли это у вас, но вот что я сделал:
- Правило udev
# /etc/udev/rules.d/40-set_usb2.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1a40", ATTR{idProduct}=="0201", TAG+="systemd", ENV{SYSTEMD_WANTS}="set_usb2.service"
- Скрипт оболочки
#!/bin/bash
# /usr/local/bin/set_usb2.sh
[ -h /sys/class/tty/ttyUSB0 ] || exit 1
pci_id=$( /usr/bin/realpath /sys/class/tty/ttyUSB0 | awk -F"https://unix.stackexchange.com/" '{print gensub(/....:(.*)/, "\\1","1",$5)}' )
usb_id=$( lspci -n| awk -v id="$pci_id" '$0 ~ id {print $3}' )
/usr/bin/setpci -H1 -d "$usb_id" d0.l=0
- Файл юнита systemd
# /etc/systemd/system/set_usb2.service
[Unit]
Description=switch USB for serials to USB2
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/local/bin/set_usb2.sh
[Install]
WantedBy=multi-user.target
Ответ или решение
При подключении устройства Coolgear USB-32COM-RM 32-портового USB-to-Serial адаптера к ноутбуку ThinkPad T490s под управлением Linux Mint 21.3, проблема с нераспознаванием всех портов может быть связана с ограничениями, накладываемыми на USB-устройства, а также настройками системы.
Проблема
Согласно вашему описанию, система распознаёт только 16 из 32 доступных портов /dev/ttyUSB. Это может быть вызвано несколькими факторами:
-
Ограничение USB: Некоторые USB-устройства могут иметь ограничения на количество одновременно активных виртуальных последовательных портов. Это связано с архитектурными ограничениями драйверов и самого USB-протокола.
-
Драйверы: Основная причина может заключаться в том, что драйвер FTDI, используемый для работы с адаптером, не инициализирует все порты. Возможно, это связано с версией ядра, или драйвером, установленным в вашей системе.
-
Конфликты с другими устройствами: Если на портах USB имеются конфликты, это также может вызвать проблемы с обнаружением устройств. Например, богатый набор других устройств, подключённых к USB-хабам, может негативно сказаться на работе адаптера.
Возможные Решения
-
Проверьте скорость USB-порта: Как было предложено пользователем, можно попробовать установить скорость USB-порта, к которому подключен адаптер, на более низкую. Это можно сделать через udev-правила и системные скрипты.
-
Создайте udev-правило:
Вы можете создать правило в/etc/udev/rules.d/
для управления настройками подключения следующего вида:ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6011", TAG+="systemd", ENV{SYSTEMD_WANTS}="set_usb2.service"
-
Создайте shell-скрипт для переключения USB на USB 2.0:
#!/bin/bash # /usr/local/bin/set_usb2.sh [ -h /sys/class/tty/ttyUSB0 ] || exit 1 pci_id=$( /usr/bin/realpath /sys/class/tty/ttyUSB0 | awk -F"/" '{print $NF}' ) usb_id=$( lspci -n | awk -v id="$pci_id" '$0 ~ id {print $3}' ) /usr/bin/setpci -H1 -d "$usb_id" d0.l=0
-
Настройка systemd-юнита:
Создайте юнит файл в/etc/systemd/system/set_usb2.service
для автоматизации выполнения скрипта:[Unit] Description=switch USB for serials to USB2 [Service] Type=oneshot RemainAfterExit=no ExecStart=/usr/local/bin/set_usb2.sh [Install] WantedBy=multi-user.target
Заключение
Для полной функциональности вашего 32-портового адаптера в системе необходимо учесть как аппаратные, так и программные настройки. Следуйте предложенным рекомендациям и проверьте, могут ли они помочь вам в решении проблемы. Возможно, потребуется также обновить ядро или поменять драйверы, что иногда является решением для максимизации распознаваемых портов.
Если указанные шаги не приведут к успеху, вам может потребоваться обратиться за поддержкой к производителю устройства или на специализированные форумы сообщества Linux, чтобы получить дополнительную помощь.