Мне нужно идентифицировать все USB-порты в системе Linux, не зная заранее, подключены ли к ним USB-устройства.
Если USB-устройство подключено к порту, запустив lsusb -t
я получу иерархию USB-устройств, где значение порта является уникальным для физического порта, к которому подключено устройство. Например, порт 3 шины 3 для устройства хранения данных в этом примере:
$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M
|__ Port 2: Dev 42, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 41, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 6: Dev 66, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 6: Dev 66, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 9: Dev 31, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 9: Dev 31, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 10: Dev 5, If 0, Class=Vendor Specific Class, Driver=qcserial, 480M
|__ Port 10: Dev 5, If 2, Class=Vendor Specific Class, Driver=qcserial, 480M
|__ Port 10: Dev 5, If 3, Class=Vendor Specific Class, Driver=qcserial, 480M
|__ Port 10: Dev 5, If 8, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
|__ Port 5: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 5: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
Любое устройство USB, подключенное к этому физическому порту, будет отображаться как находящееся на шине 3, порт 3. Номер устройства будет увеличиваться при подключении и отключении устройств. Если никакое устройство не подключено к порту 3, lsusb -t
не будет показывать этот порт.
Теперь, где я могу получить список всех реальных USB-портов машины, независимо от того, подключены ли USB-устройства?