输出是什么lsusb
意思?
dodohjk@dodohjk-PC:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera
尤其:
- 公共汽车 ###
- 设备 ###
- Linux 基金会 #.#
- “根枢纽”
那又怎么样lsusb -t
?
dodohjk@dodohjk-Compaq-Presario-CQ60-Notebook-PC:~$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/3p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/4p, 480M
|__ Port 1: Dev 3, If 0, Class=stor., Driver=usb-storage, 480M
|__ Port 2: Dev 2, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
|__ Port 2: Dev 2, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
这里我很好奇:
- 驱动程序=blabla/4p
- 12米/4.8亿
答案1
我只会回答你问题的一些细节。我开始回答更多问题,但花了很长时间才解释清楚。
通常解释输出:
以下是我发现的用于解释输出的最佳单一来源:解释 lsusb 的输出 - Diego Assencio。
驱动程序= blabla /2p、3p、4p 等。
请注意,此文本仅适用于 USB 设备树中具有 或 类的节点root_hub
。hub
它表示此集线器具有的端口数。
我不知道为什么这个信息会打印在驱动程序旁边,在我看来它应该在hub
或旁边root_hub
,但我想这样做是有充分理由的。
12M、480M等。
这是协商后的速度,单位为 Mbits/s。Fx USB 1.0 支持 12Mbit/s,USB 2.0 支持 480Mbit/s。但是,当设备连接时,操作系统会与设备协商速度。Fx 计算机鼠标通常支持 USB 2.0,但仍获得协商后的速度 12Mbit/s。
答案2
让我们开始吧lspci | grep USB
:
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 04)
这表明我的芯片组提供了 3 个 USB 主机控制器作为 PCI 设备,两个兼容 EHCI,一个 xHCI。它们是否是 PCI 设备或有多少个并不重要,lsusb
稍后您会看到它。
现在lsusb -tv
:
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/2p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M
ID 8087:8008 Intel Corp. Integrated Rate Matching Hub
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/2p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/6p, 480M
ID 8087:8000 Intel Corp. Integrated Rate Matching Hub
/: Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/10p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 002: Dev 027, If 0, Class=Hub, Driver=hub/4p, 480M
ID 05e3:0610 Genesys Logic, Inc. Hub
|__ Port 001: Dev 028, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
ID 046a:0023 CHERRY Keyboard
|__ Port 001: Dev 028, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
ID 046a:0023 CHERRY Keyboard
|__ Port 003: Dev 005, If 0, Class=Mass Storage, Driver=usb-storage, 480M
ID 0bda:0157 Realtek Semiconductor Corp. Mass Storage Device
|__ Port 010: Dev 029, If 0, Class=Hub, Driver=hub/4p, 480M
ID 05e3:0610 Genesys Logic, Inc. Hub
|__ Port 002: Dev 030, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
ID 046d:c077 Logitech, Inc. Mouse
/: Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/2p, 5000M
ID 1d6b:0003 Linux Foundation 3.0 root hub
|__ Port 002: Dev 007, If 0, Class=Hub, Driver=hub/4p, 5000M
ID 05e3:0620 Genesys Logic, Inc. GL3523 Hub
|__ Port 004: Dev 010, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
使用此-v
选项,USB 树上的每个条目都会打印一条 ID 行以下正常线路。我们重点说一下公交线路,以3号公交为例:
/: Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/10p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
总线是最令人困惑的,因为它们包含的大多是虚假的、误导性的和一些不变的信息:在总线上,您可以忽略“端口 001:Dev 001,Class=root_hub”,因为它对于每个 USB 根集线器根都是相同的。特别忽略“端口 001”的东西,因为根集线器根据定义不在任何端口本身中,也不与它创建的自己的“端口 001”相关。同样不相关的是“ID 1d6b:???? Linux Foundation xx 根集线器”:驱动程序报告虚假的制造商 ID 0x1d6b(和产品 ID),因为 PCI 设备(USB 主机控制器;在我的系统上)没有 USB ID...
这就留下了Driver=xhci_hcd/10p, 480M
相关信息。这/10p
意味着硬件支持/报告有10个端口。指480M
的是总线支持的 USB 版本。在根集线器上,USB 版本使用假的设备 ID,即“Linux Foundation 2.0 root hub”。它们总是会匹配,就像这样:
- 1.1 是 12M
- 2.0 是 480M
- 3.0 是 5000M
这公交车号码本身来自驱动程序启动(引导时)迭代(从 1 开始)。如果我没记错的话:对于哪个主机控制器将首先出现,没有真正的保证……
让我们看看我的 USB 主控制器和它们的 USB 总线之间的关系:
stat -c%N /sys/bus/usb/devices/usb*
'/sys/bus/usb/devices/usb1' -> '../../../devices/pci0000:00/0000:00:1a.0/usb1'
'/sys/bus/usb/devices/usb2' -> '../../../devices/pci0000:00/0000:00:1d.0/usb2'
'/sys/bus/usb/devices/usb3' -> '../../../devices/pci0000:00/0000:00:14.0/usb3'
'/sys/bus/usb/devices/usb4' -> '../../../devices/pci0000:00/0000:00:14.0/usb4'
您可以在这里看到:
- 第一个总线(“usb1”)实际上是 PCI 设备 0000:00:1a.0,它被报告为“USB EHCI #2”,即主机控制器认为第二芯片组的 EHCI 控制器
- PCI 设备 0000:00:14.0,xHCI,已创建二公交车 3 和 4
- 请允许我在此阶段补充一点:xHCI USB 3.0 控制器内部始终有一个用于 USB 1.1 和 USB 2.0 的 480M 总线和一个用于 USB 3.x 的总线(无法处理 <3.0 的设备)
- 这两个总线也物理存在于所有支持 3.0+ 的 USB 插头/电缆上(它们有额外的引脚用于此)
- 总线 3 是较慢的总线 (
480M
),报告称有 10 个端口,其中 6 个可实际访问,1 个用于内部集成的存储卡读卡器 - 总线 4,即快速总线(
5000M
),仅报告 2 个端口,这就是为什么 10 个端口中只有 2 个可以用 USB 3.0 线覆盖(而我的六个可见端口中有两个实际上支持 USB 3.0)
让我们最终来看看“真正的” USB 条目lsusb -tv
。例子:
|__ Port 002: Dev 007, If 0, Class=Hub, Driver=hub/4p, 5000M
ID 05e3:0620 Genesys Logic, Inc. GL3523 Hub
|__ Port 004: Dev 010, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
端口 2(总线 4)上有一个真正的 USB 集线器。这是我的一台(旧式)显示器,带有集成(非 Type-C)USB 集线器。集线器芯片来自 Genesys Logic,它实际上有 4 个可访问端口(驱动程序报告/4p
)。
您会经常遇到真实的,但内部/集成的 USB 集线器lsusb
。例如,我的总线 1 和 2(来自两个 EHCI 控制器),尽管它们各自都有 2 个端口,但都有不同的集成集线器连接到每个端口 1。一个有 4 个端口,一个有 6 个端口。在我的情况下,这些 (4 + 1) + (6 + 1) = 12 个端口似乎都没有内部使用或外部可用。
回到我的显示器:其集线器的 4 号端口上有一个 USB 记忆棒。usb-storage
司机认领了该设备。并且它在 USB 3.0 上运行(5000M
)。除非驱动程序源发生变化,否则端口号是稳定的。也就是说,无论何时插入什么东西那端口,则端口 4。Dev
但是,该编号 a) 是每个总线的本地编号,并且 b) 每次绑定设备时都会增加一。理论上,空闲编号可以重新用于下一个在该总线上(重新)注册的设备,但 USB 子系统不会这样做。
最后要提的是:如果 aDev
在 中列出两次lsusb -t
,比如我的键盘,它会在两个接口If 0
和If 1
USB 上注册。仍然只有一个设备。