USB设备厂商与产品代码查询指南
在日常的系统管理、硬件调试或嵌入式开发中,我们经常需要识别一个插入系统的USB设备究竟是什么。比如当你将一块开发板连上电脑时,lsusb显示的是ID 0403:6001—— 这串数字代表了谁?哪家公司生产的?具体是什么型号?
这时候,就需要用到USB ID 数据库。
最权威、最广泛使用的公开数据库之一就是 http://www.linux-usb.org/usb.ids。这个文件由社区维护,包含了全球绝大多数USB厂商及其产品的标识信息。
什么是 Vendor ID 和 Product ID?
每个USB设备都有两个关键十六进制编码:
- Vendor ID (VID):厂商识别码,唯一标识设备制造商。
- Product ID (PID):产品识别码,由厂商自行分配,用于区分其不同产品。
例如:
0403 Future Technology Devices International, Ltd 6001 FT232 USB-Serial (UART) IC这里的0403是 FTDI 公司的 VID,而6001是其经典芯片 FT232 的 PID。
操作系统和驱动程序正是通过这两个ID来匹配正确的驱动模块。当您看到“未知USB设备”时,往往是因为内核无法从已知列表中找到对应的描述。
如何使用 usb.ids 文件?
方法一:在线查阅
直接访问 http://www.linux-usb.org/usb.ids,浏览器会显示完整的文本内容。你可以使用页面搜索功能(Ctrl+F)查找特定的VID或PID。
比如搜索0403,就能快速定位到 FTDI 的所有产品线。
方法二:本地命令行工具
Linux 系统通常自带usbutils包,其中包含lsusb命令。如果你安装了最新的usb.ids数据库,lsusb输出就会带上清晰的设备名称。
$ lsusb Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC要更新本地数据库,可以手动下载并替换:
sudo wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids注意路径可能因发行版不同而异(如
/var/lib/usbutils/usb.ids),可通过man lsusb查看说明。
方法三:编程解析
对于开发者来说,可以将usb.ids下载后作为资源文件嵌入项目中,用于自动识别设备类型。
Python 示例:
def load_usb_ids(filename): vendors = {} current_vendor = None with open(filename, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line or line.startswith('#'): continue if '\t\t' in line: # Interface level (ignore for now) pass elif '\t' in line: # Product pid, name = line.split(None, 1) if current_vendor: vendors[current_vendor][pid] = name.strip() else: # Vendor vid, name = line.split(None, 1) vendors[vid] = {'name': name.strip()} current_vendor = vid return vendors # 使用示例 db = load_usb_ids('usb.ids') dev = db.get('0403') if dev: print("厂商:", dev['name']) product = dev.get('6001') if product: print("产品:", product)这样你就可以在自己的监控工具或配置界面中实现“即插即识”。
谁在维护这份数据?
该数据库长期由Stephen J. Gowdy维护,并托管于 linux-usb.org。任何人都可以通过以下方式提交新条目:
- 在线提交表单:http://www.linux-usb.org/usb-ids.html
- 或发送邮件补丁(diff格式)
这使得它成为一个活跃且持续增长的开源资源。许多开源项目(如 udev、libusbx、Wireshark 等)都依赖此数据库进行设备识别。
实际应用场景举例
场景1:排查假冒U盘
有些廉价U盘使用虚假VID/PID,甚至冒充知名品牌。例如数据库中有这么一条:
0001 Fry's Electronics 7778 Counterfeit flash drive [Kingston]明确指出这是一个假货。结合工具如ChipGenius或FlashDriveInfo,可进一步分析主控型号是否匹配,帮助识别扩容盘或翻新设备。
场景2:嵌入式开发调试
你在做一个基于 Atmel AT90USB162 的自制键盘项目,烧录完固件后电脑没反应。运行lsusb后发现:
ID 03eb:2040 LUFA Test PID查一下就知道这是LUFA框架默认测试用的PID。你需要修改Descriptors.c中的厂商/产品字符串以及VID/PID,才能让设备正确命名。
场景3:自动化脚本触发动作
设想一个场景:只要插入某款特定调试器(比如 SEGGER J-Link),就自动启动 GDB 调试会话。
你可以写一个 udev 规则:
ACTION=="add", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", RUN+="/path/to/start_debug.sh"其中1366是 SEGGER 的 VID。有了usb.ids,你就很容易确认这些值对应的真实设备。
常见厂商速查片段(精选)
以下是部分高频出现的厂商摘录,方便快速参考:
FTDI (串口转接常用)
0403 Future Technology Devices International, Ltd 6001 FT232 USB-Serial (UART) IC 6010 FT2232C Dual USB-UART/FIFO IC 6014 FT232H Single HS USB-UART/FIFO ICArduino / 开发板相关
2341 Arduino SA 0043 Arduino Uno R3 0243 Arduino MicroRaspberry Pi(作为USB设备)
某些Pi Zero/W 可以启用“gadget mode”,模拟成各种设备:
2e8a Raspberry Pi Foundation 000a Pico SDK Mount Point 000b Pico CMSIS-DAP模拟器手柄常见ID
079b DragonRise Inc. 0006 PC TWIN SHOCK Gamepad这类手柄常见于低价位PS2风格摇杆,在 RetroPie 配置时常需手动映射。
小贴士与注意事项
并非所有设备都被收录
特别是一些小众品牌、定制模块或未申报的白牌产品。如果找不到记录,可能是尚未提交。同ID多用途问题
同一个PID可能被用于多个外形不同的设备(尤其是公模产品)。建议结合设备描述符(iManufacturer/iProduct)综合判断。警惕伪造ID
一些恶意设备或恶意固件可能会伪装成知名厂商ID。安全敏感环境下应验证设备行为而非仅凭ID信任。版本时效性
官方网站上的usb.ids会定期更新(文首版本为 2025.04.17)。建议定期同步以获得最新支持。
结语
usb.ids文件虽小,却是连接物理硬件与软件世界的桥梁之一。无论是解决“为什么我的设备不识别”的难题,还是构建智能设备管理系统,它都扮演着不可或缺的角色。
下次当你面对一堆十六进制代码感到迷茫时,不妨打开 linux-usb.org,你会发现——原来每一块USB设备,都有它的名字。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考