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

相關內容