I know that device numbers change, but bus/port numbers are stable and reflect the
physical layout
of the hubs and devices. I relied for years on these port numbers to identify specific
(otherwise
identical) devices.
For example, I have two TEMPer temperature sensor devices attached. They are both plugged
into
a 4-port USB3 hub. They are on ports 3 and 4. Port 2 is unused and port 1 has a bluetooth
radio
attached. I also have 5 dvb usb tuners which stayed in their old positions.
Until now, I would see this:
$ lsusb
Bus 001 Device 013: ID 0c45:7401 Microdia TEMPer Temperature Sensor
Bus 001 Device 025: ID 0c45:7401 Microdia TEMPer Temperature Sensor
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
|__ Port 4: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 2: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 27, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 27, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 10, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 3: Dev 10, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 1: Dev 6, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 4: Dev 12, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 15, If 0, Class=Printer, Driver=usblp, 12M
|__ Port 1: Dev 14, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 1: Dev 14, If 0, Class=Vendor Specific Class,
Driver=dvb_usb_rtl28xxu, 480M
|__ Port 4: Dev 16, If 0, Class=Vendor Specific Class,
Driver=dvb_usb_rtl28xxu, 480M
|__ Port 4: Dev 16, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 8, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 2: Dev 8, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 5: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 20, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 1: Dev 20, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 25, If 0, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 3: Dev 25, If 1, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 4: Dev 13, If 0, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 4: Dev 13, If 1, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 6: Dev 19, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
The TEMPer devices show on Bus 01 as expected:
Port 5.Port 3 (Dev 11)
Port 5.Port 4 (Dev 13)
After rebooting the newly installed kernel 5.13.4-200.fc34.x86_64 I get:
$ lsusb
Bus 001 Device 012: ID 0c45:7401 Microdia TEMPer Temperature Sensor
Bus 001 Device 003: ID 0c45:7401 Microdia TEMPer Temperature Sensor
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 10000M
|__ Port 4: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 3: Dev 3, If 0, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 3: Dev 3, If 1, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 4: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 11, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 3: Dev 11, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 1: Dev 7, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 4: Dev 13, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 15, If 0, Class=Printer, Driver=usblp, 12M
|__ Port 1: Dev 14, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 1: Dev 14, If 0, Class=Vendor Specific Class,
Driver=dvb_usb_rtl28xxu, 480M
|__ Port 4: Dev 16, If 0, Class=Vendor Specific Class,
Driver=dvb_usb_rtl28xxu, 480M
|__ Port 4: Dev 16, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 9, If 0, Class=Vendor Specific Class, Driver=dvb_usb_rtl28xxu,
480M
|__ Port 2: Dev 9, If 1, Class=Vendor Specific Class, Driver=, 480M
|__ Port 5: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 10, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 1: Dev 10, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 12, If 0, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 3: Dev 12, If 1, Class=Human Interface Device, Driver=,
1.5M <<<<<
|__ Port 6: Dev 18, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
One can see that the TEMPer devices are now showing on Bus 01 in separate positions:
Port 3 (Dev 3) new position
Port 5.Port 3 (Dev 12) old position
This, naturally, confuses my script that collects the data (I use temper-poll).
Is this an intentional change?
--
Eyal Lebedinsky (fedora(a)eyal.emu.id.au)