這是一個(gè)包含了所有已知 USB 設(shè)備 ID 的開(kāi)源項(xiàng)目。
• 來(lái)源:linux.cn • 作者:Alan Formy-duval • 譯者:geekpi •
(本文字?jǐn)?shù):6115,閱讀時(shí)長(zhǎng)大約:7 分鐘)
市場(chǎng)上有成千上萬(wàn)的 USB 設(shè)備:鍵盤、掃描儀、打印機(jī)、鼠標(biāo)和其他無(wú)數(shù)的設(shè)備,都能在 Linux 上工作。它們的供應(yīng)商詳情都存儲(chǔ)在 USB ID 倉(cāng)庫(kù)中。
lsusb
Linux lsusb 命令列出了連接到系統(tǒng)的 USB 設(shè)備的信息,但有時(shí)信息不完整。例如,我最近注意到我的一個(gè) USB 設(shè)備的品牌沒(méi)有被識(shí)別。設(shè)備是可以使用的,但是在列出我所連接的 USB 設(shè)備的詳情中沒(méi)有提供任何識(shí)別信息。以下是我的 lsusb 命令的輸出:
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc.
Bus 001 Device 003: ID 0951:16d2 Kingston Technology
Bus 001 Device 002: ID 18f8:1486
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
正如你在最后一欄中看到的,有一個(gè)設(shè)備沒(méi)有制造商描述。要確定這個(gè)設(shè)備是什么,我必須對(duì)我的 USB 設(shè)備樹(shù)進(jìn)行更深入的檢查。幸運(yùn)的是,lsusb 命令有更多的選項(xiàng)。其中一個(gè)選項(xiàng)是 -D device,來(lái)獲取每個(gè)設(shè)備的詳細(xì)信息,正如手冊(cè)頁(yè)面所解釋的那樣:
“不會(huì)掃描 /dev/bus/usb 目錄,而只顯示給定設(shè)備文件所屬設(shè)備的信息。設(shè)備文件應(yīng)該是類似 /dev/bus/usb/001/001 這樣的文件。這個(gè)選項(xiàng)會(huì)像 v 選項(xiàng)一樣顯示詳細(xì)信息,但你必須是 root 用戶才行。"
我認(rèn)為如何將設(shè)備路徑傳遞給 lsusb 命令并不容易,但在仔細(xì)閱讀手冊(cè)頁(yè)和初始輸出后,我能夠確定如何構(gòu)造它。USB 設(shè)備駐留在 UDEV 文件系統(tǒng)中。它們的設(shè)備路徑始于 USB 設(shè)備目錄 /dev/bus/usb/。路徑的其余部分由設(shè)備的總線 ID 和設(shè)備 ID 組成。我的無(wú)描述設(shè)備是 Bus 001 Device 002,被翻譯成了 001/002,完成的路徑為 /dev/bus/usb/001/002。現(xiàn)在我可以把這個(gè)路徑傳給 lsusb。我還會(huì)用管道傳給 more,因?yàn)檫@里往往有很多信息:
$ lsusb -D /dev/bus/usb/001/002 |more
Device: ID 18f8:1486
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x18f8
idProduct 0x1486
bcdDevice 1.00
iManufacturer 0
iProduct 1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 59
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
不幸的是,這里并沒(méi)有提供我希望找到的細(xì)節(jié)。初始輸出中出現(xiàn)的兩個(gè)字段 idVendor 和 idProduct 都是空的。這有些幫助,因?yàn)橥驴匆幌拢蜁?huì)發(fā)現(xiàn) Mouse 這個(gè)詞。所以,這個(gè)設(shè)備就是我的鼠標(biāo)。
USB ID 倉(cāng)庫(kù)
這讓我不禁想知道如何才能填充這些字段,不僅是為了自己,也是為了其他 Linux 用戶。原來(lái)已經(jīng)有了一個(gè)開(kāi)源項(xiàng)目: USB ID 倉(cāng)庫(kù) 。它是一個(gè)公共倉(cāng)庫(kù),它包含了 USB 設(shè)備中使用的所有已知 ID。它也被用于各種程序中,包括 USB Utilities ,用于顯示人類可讀的設(shè)備名稱。

The USB ID Repository Site
你可以從網(wǎng)站上或通過(guò)下載數(shù)據(jù)庫(kù)來(lái)瀏覽特定設(shè)備的倉(cāng)庫(kù)。也歡迎用戶提交新的數(shù)據(jù)。我要為我的鼠標(biāo)提交數(shù)據(jù),因?yàn)樗鼪](méi)有在里面。
更新你的 USB ID
USB ID 數(shù)據(jù)庫(kù)存儲(chǔ)在一個(gè)名為 usb.ids 的文件中。這個(gè)文件的位置可能會(huì)因 Linux 發(fā)行版的不同而不同。
在 Ubuntu 18.04 中,這個(gè)文件位于 /var/lib/usbutils。要更新數(shù)據(jù)庫(kù),使用命令 update-usbids,你需要用 root 權(quán)限或 sudo 來(lái)運(yùn)行。
$ sudo update-usbids
如果有新文件,它就會(huì)被下載。當(dāng)前的文件將被備份,并被替換為新文件:
$ ls -la
total 1148
drwxr-xr-x 2 root root 4096 Jan 15 00:34 .
drwxr-xr-x 85 root root 4096 Nov 7 08:05 ..
-rw-r--r-- 1 root root 614379 Jan 9 15:34 usb.ids
-rw-r--r-- 1 root root 551472 Jan 15 00:34 usb.ids.old
最新版本的 Fedora Linux 將數(shù)據(jù)庫(kù)文件保存在 /usr/share/hwdata 中。而且,沒(méi)有更新腳本。而是,數(shù)據(jù)庫(kù)由一個(gè)名為 hwdata 的軟件包維護(hù)。
# dnf info hwdata
Installed Packages
Name : hwdata
Version : 0.332
Release : 1.fc31
Architecture : noarch
Size : 7.5 M
Source : hwdata-0.332-1.fc31.src.rpm
Repository : @System
From repo : updates
Summary : Hardware identification and configuration data
URL : https://github.com/vcrhonek/hwdata
License : GPLv2+
Description : hwdata contains various hardware identification and configuration data,
: such as the pci.ids and usb.ids databases.
現(xiàn)在我的 USB 設(shè)備列表在這個(gè)之前未命名的設(shè)備旁邊顯示了一個(gè)名字。比較一下上面的輸出:
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
Bus 001 Device 003: ID 0951:16d2 Kingston Technology
Bus 001 Device 014: ID 18f8:1486 [Maxxter]
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
你可能會(huì)注意到,隨著倉(cāng)庫(kù)定期更新新設(shè)備和現(xiàn)有設(shè)備的詳細(xì)信息,其他設(shè)備的描述也會(huì)發(fā)生變化。
提交新數(shù)據(jù)
提交新數(shù)據(jù)有兩種方式:使用網(wǎng)站或通過(guò)電子郵件發(fā)送特殊格式的補(bǔ)丁文件。在開(kāi)始之前,我閱讀了提交指南。首先,我必須注冊(cè)一個(gè)賬戶,然后我需要使用項(xiàng)目的提交系統(tǒng)提供我鼠標(biāo)的 ID 和名稱。添加任何 USB 設(shè)備的過(guò)程都是一樣的。
你使用過(guò) USB ID 倉(cāng)庫(kù)么?如果有,請(qǐng)?jiān)谠u(píng)論中分享你的反饋。
via: opensource.com
作者: Alan Formy-Duval 選題: lujun9972 譯者: geekpi 校對(duì): wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國(guó) 榮譽(yù)推出