lsusb -v 命令未显示 USB 序列号

lsusb -v 命令未显示 USB 序列号

我有一个 USB 记忆棒,我想从中读取序列号。如果我调用该命令, lsusb -v该行的输出iSerial如下:

iSerial    3

如果我去/proc/scsi/usb-storage查看该文件,我会得到以下输出:

Host scsi10: usb-storage
Vendor: USB
Product: Disk 2.0
Serial Number: 92071573E1272519149
Protocol: Transparent SCSI
Transport: Bulk
Quirks:

为什么一方面该命令没有串行输出lsusb,但另一方面我从/proc/scsi/usb-storage.这两种收集序列的方法有什么区别?

答案1

lsusb可能会尝试将 USB 设备打开为O_RDWR(读/模式),并且您的用户可能无权执行此操作(如果是这样,输出之间应该出现一些错误消息“无法打开设备,某些信息将丢失”)。以 root 身份启动lsusb还应该能够输出整个 iSerial 值。

答案2

一般来说,有许多不同的 USB 设备(键盘、鼠标、网络摄像头……)。lsusb处理 USB 协议级别的连接设备。

某些 USB 设备是存储设备(USB 记忆棒、USB 硬盘...)。他们了解 USB 协议之上的不同协议(或多或少的 SCSI)。在此协议中,USB 存储设备具有序列号(ATA 设备也是如此)。这就是您在 中看到的/proc/scsi/usb-storage

iSerial你看到的数字与lsusb此无关。

这就是为什么您可以使用一种方法看到您感兴趣的序列号,但使用另一种方法却看不到。这就是为什么你不能用来lsusb获取你感兴趣的序列号

答案3

您可以使用lsusbverbose 标志,但您需要确保使用sudo它,否则序列将不正确。

sudo lsusb -v

如果这太冗长,请运行lsusb以获取设备 ID:

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 012: ID 1ab1:0e11 Rigol Technologies
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

然后lsusb使用-sflag 运行以仅显示指定的设备并 grep 获取序列号。

那么对于Rigol设备的序列号:

$ sudo lsusb -s 012 -v|grep -i iserial
  iSerial                 3 DP8C221100000

有关lsusb使用该--help标志的更多信息:

$ lsusb --help
Usage: lsusb [options]...
List USB devices
  -v, --verbose
      Increase verbosity (show descriptors)
  -s [[bus]:][devnum]
      Show only devices with specified device and/or
      bus numbers (in decimal)
  -d vendor:[product]
      Show only devices with the specified vendor and
      product ID numbers (in hexadecimal)
  -D device
      Selects which device lsusb will examine
  -t, --tree
      Dump the physical USB device hierarchy as a tree
  -V, --version
      Show version of program
  -h, --help
      Show usage and help

相关内容