这是一个包含所有已知USB设备ID的开源项目。市场上有数以千计的USB设备:键盘、扫描仪、打印机、鼠标,以及无数其他都可以在Linux上运行的设备。他们的供应商详细信息存储在USBID存储库中。lsusbLinuxlsusb命令列出了有关连接到系统的USB设备的信息,但有时信息不完整。例如,我最近注意到我的一个USB设备的品牌无法被识别。该设备是可用的,但在列出我连接的USB设备的详细信息中没有提供识别信息。ID18f8:1486Bus001Device005:ID051d:0002AmericanPowerConversionUninterruptiblePowerSupplyBus001Device001:ID1d6b:0002LinuxFoundation2.0roothub正像你在最后一栏中看到的,有一个设备没有制造商描述。为了确定这个设备是什么,我必须对我的USB设备树进行更深入的检查。幸运的是,lsusb命令有更多选项。其中一个选项是-D设备,以获取有关每个设备的详细信息,如手册页所述:“不会扫描/dev/bus/usb目录,而只会扫描给定设备文件所属设备的信息.Device文件应该类似于/dev/bus/usb/001/001。此选项将显示详细信息,如v选项,但您必须是root用户。”我认为如何将设备路径传递给lsusb命令并不容易,但在仔细阅读手册页和初始输出后,我能够弄清楚如何构造它。USB设备驻留在UDEV文件系统中。它们的设备路径从USB设备目录/dev/bus/usb/开始。路径的其余部分由设备的总线ID和设备ID组成。我的非描述设备是Bus001Device002,翻译成001/002,完整的路径是/dev/bus/usb/001/002。现在我可以将此路径传递给lsusb。我还会使用管道传给more,因为这里会有很多信息:$lsusb-D/dev/bus/usb/001/002|moreDevice:ID18f8:1486DeviceDescriptor:bLength18bDescriptorType1bcdUSB1.10(DefinedatInterfacelevel)bDeviceSubClass0bDeviceProtocol0bMaxPacketSize08idVendor0x18f8idProduct0x1486bcdDevice1.00iManufacturer0iProduct1iSerial0bNumConfigurations1ConfigurationDescriptor:bLength9bDescriptorType2wTotalLength59bNumInterfaces2bConfigurationValue1iConfiguration0bmAttributes0xa0(BusPowered)RemoteWakeupMaxPower100mAInterfaceDescriptor:bLength9bDescriptorType4bInterfaceNumber0bAlternateSetting0bNumEndpoints1bInterfaceClass3HumanInterfaceDevicebInterfaceSubClass1BootInterfaceSubclassbInterfaceProtocol2MouseiInterface0HIDDeviceDescriptor:Unfortunately,thisdoesn'tprovidethedetailsIwashopingtofind.初始输出中出现的两个字段idVendor和idProduct为空。这有点帮助,因为往下看,你会发现鼠标这个词。所以,这个设备就是我的鼠标。USBID存储库这让我想知道如何填充这些字段,不仅是为了我自己,也是为了其他Linux用户。原来已经有一个开源项目:USBID存储库。它是一个公共存储库,包含USB设备中使用的所有已知ID。它还用于各种程序(包括USB实用程序)以显示人类可读的设备名称。您可以从网站或通过下载数据库浏览特定设备的存储库。也欢迎用户提交新数据。我要为我的鼠标提交数据,因为它不在那里。更新您的USBIDUSBID数据库存储在名为usb.ids的文件中。此文件的位置可能因不同的Linux发行版而异。在Ubuntu18.04中,此文件位于/var/lib/usbutils。要更新数据库,请使用命令update-usbids,您需要以root权限或sudo运行该命令。$sudoupdate-usbids如果有新文件,就会下载。当前文件将被备份并替换为新文件:$ls-latotal1148drwxr-xr-x2rootroot4096Jan1500:34.drwxr-xr-x85rootroot4096Nov708:05..-rw-r--r--1rootroot614379Jan915:34usb.ids-rw-r--r--1rootroot551472Jan1500:34usb.ids.old最新版本的FedoraLinux将数据库文件存储在/usr/share/hwdata中。此外,没有更新脚本。相反,数据库由一个名为hwdata的包维护。#dnfinfohwdataInstalledPackagesName:hwdataVersion:0.332Release:1.fc31Architecture:noarchSize:7.5MSource:hwdata-0.332-1.fc31.src.rpmRepository:@SystemFromrepo:updatesSummary:HardwareidentificationandconfigurationdataURL:https://github.com/GPLviconek2:hPLviconek2:hPLviconek2:hPLviconek2vcrh说明:hwdata包含各种硬件标识和配置数据,例如pci.ids和usb.ids数据库。NowmyUSBdevicelistshowsanamenexttothispreviouslyunnameddevice.比较一下上面的输出:$lsusbBus002Device001:ID1d6b:0003LinuxFoundation3.0roothubBus001Device004:ID046d:082cLogitech,Inc.HDWebcamC615Bus001Device003:ID0951:16d2KingstonTechnologyBus001Device014:ID18f8:1486[Maxxter]Bus001Device005:ID051d:0002AmericanPowerConversionUninterruptiblePowerSupplyBus001Device001:ID1d6b:0002LinuxFoundation2.0roothub你可能会注意到,随着仓库定期更新新设备和现有设备的详细信息,其他设备的描述将发生变化。提交新数据有两种方法可以提交新数据:使用网站或通过电子邮件发送特殊格式的补丁文件。在开始之前,我阅读了提交指南。首先,我必须注册一个帐户,然后我需要使用项目的提交系统提供鼠标的ID和名称。添加任何USB设备的过程都是相同的。
