Linux usb device port

Ubuntu/Debian How to identify USB port of device

How can you identify individual USB devices to unbind and bind them? Specifically, devices like mice, keyboard, dongles, etc. which are not storage. For example, on Debian (Raspbian GNU/Linux v8.0 in this case), I have a few devices listed in /sys/bus/usb/drivers/usbhid/: ls /sys/bus/usb/drivers/usbhid/ shows USB devices:

1-1.2:1.0 1-1.2:1.1 1-1.2:1.2 1-1.3:1.0 1-1.3:1.1 1-1.4:2.2 
Bus 001 Device 006: ID 1410:9020 Novatel Wireless Bus 001 Device 009: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0 Bus 001 Device 008: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
/: Bus 01.Port 1: Dev 1, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Driver=hub/5p, 480M |__ Port 1: Dev 3, If 0, Specific Class, Driver=smsc95xx, 480M |__ Port 2: Dev 8, If 0, Interface Device, Driver=usbhid, 12M |__ Port 2: Dev 8, If 1, Interface Device, Driver=usbhid, 12M |__ Port 2: Dev 8, If 2, Interface Device, Driver=usbhid, 12M |__ Port 3: Dev 9, If 0, Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 9, If 1, Interface Device, Driver=usbhid, 1.5M |__ Port 4: Dev 6, If 0, Driver=cdc_ether, 480M |__ Port 4: Dev 6, If 1, Data, Driver=cdc_ether, 480M |__ Port 4: Dev 6, If 2, Interface Device, Driver=usbhid, 480M 

I know that the Novatel Wireless is 1-1.4:2.2 from guessing. I can then reset it by running echo -n ‘1-1.4:2.2’ > /sys/bus/usb/drivers/usbhid/unbind and echo -n ‘1-1.4:2.2’ > /sys/bus/usb/drivers/usbhid/bind It would be great if there was an obvious way to identify it and reset it in a bash script. Also, how can a device be identified and reset if there are more than one of the same hardware on different ports?

Источник

USB устройства

USB — Universal Serial Bus (Универсальная последовательная шина) была разработана консорциумом компаний с целью предоставить единственную, простую шину для подключения периферии.

Порты Linux USB-устройств

Поддержка USB устройств

Дизайн USB позволяет устройствам подключаться на лету, используя для подключения стандартные гнезда. USB устройства включают в себя: клавиатуры, мыши, принтеры, сканеры, жесткие диски, флэш-драйвы, камеры, модемы, сетевые адаптеры и колонки, а их список постоянно растёт.

Имеющаяся в Linux поддержка USB устройств достаточно всеобъемлюща, но ряд устройств требуют специальных драйверов, а другие, преимущественно принтеры и сканеры, могут не поддерживаться или поддерживаться лишь частично.

Читайте также:  Linux socket open files

Компьютерные системы могут содержать один или более контроллеров или хабов, предназначенных для подключения USB устройств или другого (внешнего) хаба. Хаб может поддерживать до 7 устройств, которые, в свою очередь, могут иметь дополнительные хабы. Хаб внутри системного блока называется root hub (корневой хаб). Каждая такая звездоподобная топология может поддерживать до 127 хабов или устройств.

Говоря USB порт, мы подразумеваем возможность поддержки USB в компьютере и гнездо для подключения, а не внутренний адрес порта, используемый устройством.

Многослойность USB системы позволяет хосту определить характеристики USB устройства, включая класс, имя производителя, имя устройства, требования к напряжению, скорость, уровень поддержки USB и другие функции.

Модуль поддержки USB устройств в Linux

USB устройства в настоящее время полностью поддерживаются в Linux. Большая часть изменений проявилась в ветке ядра 2.6, хотя определённая поддержка имелась даже в ядрах 2.2. Linux поддерживает как USB 2.0, так и ранние спецификации. Ввиду подключения на лету (горячего подключения), заложенной в самой природе USB, поддержка обычно производится посредством модулей ядра, которые могут загружаться или выгружаться по необходимости.

Команда lspci позволяет отобразить USB устройства:

root@localhost:~:# lspci | grep -i usb 00:03.0 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.1 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.3 USB Controller: Silicon Integrated Systems [SiS] USB 2.0 Controller

Вывод команды показывает, что в системе имеются 3 USB контроллера.

С помощью команды lsmod можно отобразить загруженные USB модули:

root@localhost:~:# lsmod | egrep 'usb|hci|hid|mouse|Module' Module Size Used by hid_microsoft 3232 0 usbhid 32992 0 hid 39040 2 hid_microsoft,usbhid ohci_hcd 24332 0 psmouse 41644 0 ssb 38464 1 ohci_hcd ehci_hcd 34152 0

Отображение подключенных USB устройств

Сводная информация о подключенных в настоящее время USB устройствах содержится в файле /proc/bus/usb/devices.

Вывести её можно следующей командой:

root@localhost:~:# cat /proc/bus/usb/devices T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=00db Rev= 1.73 S: Manufacturer=Microsoft S: Product=Natural� Ergonomic Keyboard 4000 C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:03.3 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

В листинге Spd=480 соответствует шине USB 2.0, а Spd=12 — устройствам USB 1.1. Далее в списке видно, что к системе в настоящее время подключено 1 USB устройство — Microsoft Natural Ergonomic Keyboard 400 (Spd=1.5).

Читайте также:  Linux change default gateway

На этой клавиатуре я, естественно, и набираю данный текст.

Иерархию подключения USB устройств позволяет увидеть команда lsusb с опцией -t:

root@localhost:~:# lsusb -t Bus# 3 `-Dev# 1 Vendor 0x1d6b Product 0x0001 Bus# 2 `-Dev# 1 Vendor 0x1d6b Product 0x0001 `-Dev# 2 Vendor 0x045e Product 0x00db Bus# 1 `-Dev# 1 Vendor 0x1d6b Product 0x0002

Вывод информации о конкретном USB устройстве можно получить следующей командой:

root@localhost:~:# lsusb -vd 0x045e:0x00db Bus 002 Device 002: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x045e Microsoft Corp. idProduct 0x00db Natural Ergonomic Keyboard 4000 V1.0 bcdDevice 1.73 iManufacturer 1 Microsoft iProduct 2 Natural� Ergonomic Keyboard 4000 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 59 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 3c 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 56 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)

Подключение USB устройства на лету

Новые системы Linux имеют поддержку подключения USB устройств на лету (горячее подключение), что подразумевает подключение устройства к работающей системе, которая должна:

  • определить тип USB устройства, найти драйвер и запустить его;
  • связать драйвер с устройством;
  • уведомить о USB устройстве другие подсистемы.
Читайте также:  Поменять язык ввода линукс

Источник

How to find USB device port in Linux?

enter image description here

I have a USB device connected to my computer, it is this one: I want to use it in Python according to the example in this link. How do I know what to put for port (instead of ‘COM1′ ) in the line with ShdlcSerialPort(port=’COM1’, baudrate=460800) as port: ?

In that answer he just guesses that it is /dev/ttyACM0 . In my system I don’t see it so it does not work for me.

Then you should ask in one of sibling sites that covers this topic (maybe Linux in general). Setting up hardware is not a software developer task.

1 Answer 1

In linux, lsusb is a tool used to display information about the USB bus in the system and connected to the system. lsusb will display the drivers and internal devices connected to your system, including PID and VID, as well as simple device descriptions.

$ lsusb -v |grep -Ei ‘(idVendor|Mass\ Storage)’ idVendor 0×1005 Apacer Technology, Inc. bInterfaceClass 8 Mass Storage 

Output very detailed information, including the current of the device and so on. With the grep command to specify specific information, the mass storage device will have a vendor name and ID.

Bus 008: Indicate where the device is connected (which bus) Device 002: Indicates that this is the second device connected to the bus ID: ID of the device Broadcom Corp. Bluetooth Controller: Manufacturer name and device name

$ lsusb -t /: Bus 08.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 07.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 06.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 05.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 04.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 03.Port 1: Dev 1, Driver=uhci_hcd/2p, 12M /: Bus 02.Port 1: Dev 1, Driver=ehci_hcd/6p, 480M |__ Port 1: Dev 4, If 0, Driver=usb-storage, 480M |__ Port 6: Dev 3, If 0, 0x0e not yet handled’, Driver=uvcvideo, 480M |__ Port 6: Dev 3, If 1, 0x0e not yet handled’, Driver=uvcvideo, 480M /: Bus 01.Port 1: Dev 1, Driver=ehci_hcd/6p, 480M 

12M means that the speed of USB 1.0 / 1.1 is 12Mbit/s

480M means that the speed of USB 2.0 is 480Mbit/s

If you find 5.0G, it means you have a USB 3.0 type interface. It has a transmission rate of 5.0Gbit/s. Linux recognizes the detailed information of USB devices from /var/lib/usbutils/usb.ids. Or you can visit Linux-USB.org to get the latest USB ID list.

Источник

Оцените статью
Adblock
detector