Серийный номер USB не отображается при выполнении команды lsusb -v

Серийный номер USB не отображается при выполнении команды lsusb -v

У меня есть 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(чтение/писатьmode) и у вашего пользователя может не быть прав на это (в таком случае между выводом должно быть сообщение об ошибке «Не удалось открыть устройство, часть информации будет отсутствовать»). Запущенный как root, он lsusbтакже должен иметь возможность выводить все значение iSerial.

решение2

В целом существует множество различных USB-устройств (клавиатуры, мыши, веб-камеры, ...). lsusbимеет дело с подключенными устройствами на уровне протокола USB.

Некоторые USB-устройства являются устройствами хранения данных (USB-накопители, жесткие диски USB, ...). Они понимают другой протокол (более или менее SCSI) поверх протокола USB. В рамках этого протокола USB-устройство хранения данных имеет серийный номер (как и устройство ATA). Это то, что вы видите в /proc/scsi/usb-storage.

Число iSerial, которое вы видите, lsusbне имеет к этому никакого отношения.

Вот почему вы видите серийный номер, который вас интересует, одним методом, но не другим методом. И вот почему вы не можете использовать, lsusbчтобы получить тот серийный номер, который вас интересует

решение3

Вы можете использовать lsusbфлаг verbose, но вам нужно убедиться, что вы используете sudoего, иначе серийный номер будет неверным.

sudo lsusb -v

Если это слишком многословно, то выполните команду lsusb, чтобы получить идентификатор устройства:

$ 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с -sфлагом, чтобы отобразить только указанное устройство, и выполните 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

Связанный контент