您如何解释 lsusb 输出?

您如何解释 lsusb 输出?

输出是什么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_hubhub它表示此集线器具有的端口数。

我不知道为什么这个信息会打印在驱动程序旁边,在我看来它应该在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 0If 1USB 上注册。仍然只有一个设备。

相关内容