Как получить поставщика USB и информацию о продукте программно о Linux?

Используя udev я смог получить эту информацию для определенного USB-устройства:

idVendor: 13b1
idProduct: 0018
manufacturer:  
product: USB 2.0 Network Adapter ver.2 
serial: 00FFFF

Теперь я хочу получить полные строки, которые связаны с поставщиком и идентификаторами продукта. Я нашел что файл /usr/share/misc/usb.ids содержит информацию, которую я ищу:

13b1  Linksys
        000b  WUSB11 v4.0 802.11b Adapter
        000d  WUSB54G Wireless Adapter
        0011  WUSB54GP v4.0 802.11g Adapter
        0018  USB200M 10/100 Ethernet Adapter
        001a  HU200TS Wireless Adapter
        001e  WUSBF54G 802.11bg
        0020  WUSB54GC 802.11g Adapter [ralink rt73]
        0023  WUSB54GR
        0024  WUSBF54G v1.1 802.11bg

Однако мне не ясно, как я должен получить эти данные в своем приложении. Существует ли доступный API, или я должен просто проанализировать файл? Если я принимаю решение проанализировать его, то /usr/share/misc/usb.ids всегда собираясь быть корректным местоположением?

16
задан StackedCrooked 19 July 2010 в 09:23
поделиться

3 ответа

Команда lsusb запрашивает информацию о подключенных в данный момент USB-устройствах. Вы можете использовать опцию -d для запроса определенного поставщика / продукта (но, похоже, это работает только для подключенных в данный момент устройств):

$ lsusb -d 0e21:0750
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.

Вы можете показать информацию для всех устройств:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:01c7 Nokia Mobile Phones
Bus 001 Device 003: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.
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 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 046d:c01b Logitech, Inc. MX310 Optical Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Вы также можете сделайте его подробным ( lsusb -v ) и распечатайте много всего.

Обратите внимание, что при доступе к информации о системе в ОС Linux гораздо предпочтительнее делать это с помощью команд оболочки (таких как lsusb ), чем напрямую анализировать системные файлы, к которым эти команды обращаются.

20
ответ дан 30 November 2019 в 21:18
поделиться

Ваше USB-устройство не должно сопоставлять идентификаторы поставщика и продукта с действительными правильными именами.

Было бы безопаснее получать эту информацию с самого устройства, используя что-то вроде libusb или lsusb .

1
ответ дан 30 November 2019 в 21:18
поделиться

В моей системе Ubuntu на странице lsusb (1) указано, что /var/lib/usbutils/usb.ids - это расположение id файл; фактически существует две символические ссылки, одна из которых - ваш /usr/share/misc/usb.ids . Я бы доверял фактическому местоположению, прежде чем доверять символическим ссылкам:

$ ls -l /usr/share/misc/usb.ids /var/lib/misc/usb.ids /var/lib/usbutils/usb.ids
lrwxrwxrwx 1 root root     25 2010-04-29 18:08 /usr/share/misc/usb.ids -> /var/lib/usbutils/usb.ids
lrwxrwxrwx 1 root root     19 2010-04-29 18:08 /var/lib/misc/usb.ids -> ../usbutils/usb.ids
-rw-r--r-- 1 root root 368377 2009-11-06 09:26 /var/lib/usbutils/usb.ids
3
ответ дан 30 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: