查找 lsusb 输出中的条目对应的设备节点

查找 lsusb 输出中的条目对应的设备节点

我需要使用来确定我的 USB 是否全速工作的lsusbUSB 连接类型。我读到要做到这一点我需要使用,但输出没有告诉我每个条目对应哪个设备节点。我该如何弄清楚?ddlsusb -t

答案1

lsusb -t 似乎提供了一个列出“Dev X”的树 - 这对应于标准“lsusb”列表中的设备“00X”。

另一种选择是使用 lsusb -v,它“包含设备当前速度的配置描述符”。

答案2

我已经研究这个问题一段时间了,下面是我编写的一个脚本,用于将 lsusb 输出映射到 /sys。它似乎对我有用,但我还没有进行过广泛的测试。

(注意:我在格式化方面不太走运,所以你可能需要添加一些换行符或其他内容)

#!/bin/bash
#
# usb2sys - find lsusb device in /sys file system
#

die()
{
    echo "$@"
    exit 1
}

[[ $# -lt 1 ]] && die "need vendor and product ids (from lsusb) as dddd:dddd"

vendor=${1%:*}
product=${1##*:}

sys=/sys/bus/usb/devices/
cd $sys

for d in *; do
    path=$sys/$d
    if [ -f $path/idProduct ]; then
      prod=$( cat $path/idProduct )
      vend=$( cat $path/idVendor )

      if [ $prod = $product -a $vend = $vendor ]; then
        echo prod = $prod
        echo vend = $vend
        echo /sys device is $path
        cat $path/power/wakeup
        echo ""
      fi
    fi
done

答案3

据我所知,没有一个命令或实用程序可以为您提供这些信息。您必须在 下查找信息/sys。请参阅https://stackoverflow.com/questions/3493858/linux-how-to-map-a-blockdevice-to-a-usb-device了解更多信息。

答案4

这是输出lsusb-t对于我的系统:

    # lsusb -t
    /:总线 04.端口 1:Dev 1,Class=root_hub,驱动程序=ehci-pci/2p,480M
        |__ 端口 1:设备 2,如果 0,类别=Hub,驱动程序=hub/6p,480M
    /:总线 03.端口 1:Dev 1,Class=root_hub,驱动程序=ehci-pci/2p,480M
        |__ 端口 1:设备 2,如果 0,类别=Hub,驱动程序=hub/6p,480M
            |__ 端口 3:设备 3,如果为 0,则类别=无线,驱动程序=btusb,12M
            |__ 端口 3:设备 3,如果 1,类别=无线,驱动程序=btusb,12M
    /:总线 02.端口 1:Dev 1,Class=root_hub,驱动程序=xhci_hcd/4p,5000M
        |__ 端口 3:设备 2,如果为 0,则类别 = 大容量存储,驱动程序 = usb-storage,5000M
    /:总线 01.端口 1:Dev 1,Class=root_hub,驱动程序=xhci_hcd/4p,480M
        |__ 端口 1:设备 2,如果为 0,则类 = 人机接口设备,驱动程序 = usbhid,12M
        |__ 端口 1:设备 2,如果 1,类别 = 人机接口设备,驱动程序 = usbhid,12M
        |__ 端口 1:设备 2,如果 2,类 = 人机接口设备,驱动程序 = usbhid,12M
        |__ 端口 2:设备 3,如果为 0,则类别 = 供应商特定类别,驱动程序 = asix,480M

唯一的大容量存储设备位于总线 02、端口 03,由驱动程序提供服务xhci_hcd,这是适用于 USB3.0 设备的 Linux 驱动程序。据我所知,这是您能找到的唯一有关速度的参考资料,请点击此处。

上述内容可以通过以下方式进行复查。由于您正在寻找堵塞设备,转到/系统/类/块,您可以在这里找到:

# cd /sys/class/block/
root@debS:/sys/class/block# ls
loop0  loop2  loop4  loop6  sda   sda2  sda6  sdb
loop1  loop3  loop5  loop7  sda1  sda5  sda7  sdb1

假设你对块设备感兴趣安全数据库,现在你确定总线地址如下:

# cd sdb; cd $(realpath $PWD); echo $PWD
/sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host6/target6:0:0/6:0:0:0/block/sdb

此 (bus2, port 3) 与上面的相符。

相关内容