news 2026/4/23 18:42:36

USB设备识别利器:linux-usb.org/usb.ids

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
USB设备识别利器:linux-usb.org/usb.ids

USB设备识别利器:linux-usb.org/usb.ids

在调试嵌入式系统时,你有没有遇到过这样的场景?插上一个USB转串口模块,dmesg弹出一堆信息,最后只留下一句:

New USB device found, idVendor=067b, idProduct=2303

然后呢?这个067b:2303到底是什么设备?是Prolific的PL2303芯片?还是某个山寨版本?驱动能不能用?权限配不配得上?

这时候,如果你知道去查 linux-usb.org/usb.ids,问题可能几秒就解决了。


一张文本表,撑起整个Linux USB生态的认知基础

别看它只是一个纯文本文件,usb.ids实际上是全球Linux系统识别USB设备的“共同语言”基石。几乎所有主流发行版、硬件探测工具和自动化脚本背后,都依赖这份由社区长期维护的权威数据库。

它的结构极其简洁却高效:

04d8 Microchip Technology, Inc. 0002 PicoLCD 20x2 0003 PICkit 2 Microcontroller Programmer 0032 PICkit1

顶级行是厂商ID + 名称,缩进行则是该厂商下的具体产品。没有复杂格式,没有加密字段,一切清晰可读——这种设计让它既能被人类快速浏览,也能被机器轻松解析。

当你执行lsusb看到如下输出时:

Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

其中那段“Prolific Technology, Inc. PL2303 Serial Port”,大概率就是从usb.ids映射过来的。也就是说,你的系统之所以能“认出”这根线是个什么玩意儿,很可能就是因为底层程序悄悄查了这个列表。


不只是“看看叫啥”,它是真实工作流中的关键拼图

很多人以为这只是个查询工具,但其实它深入到了许多工程实践的核心环节。

驱动开发与兼容性验证

你在写内核模块或用户态驱动时,常需要判断某个VID/PID是否已被现有驱动支持。比如你知道某款JTAG仿真器用的是NXP的LPC-link芯片,VID是1fc9,PID是000c,直接去usb.ids搜一下:

1fc9 NXP Semiconductors 000c LPC-LINK CMSIS-DAP

确认无误后就可以放心调用对应的固件加载逻辑。如果没列出来?那可能是新型号,或者压根就是仿冒设备——这时候就得小心处理了。

自动化部署中的设备响应机制

设想一个工业网关场景:每次插入特定型号的4G模组(比如华为ME909s),系统要自动启动ppp拨号服务。你可以写一条udev规则:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="15c1", RUN+="/usr/local/bin/start-4g.sh"

而这里的12d1:15c1哪来的?正是来自对usb.ids的查证:

12d1 Huawei Technologies Co., Ltd. 15c1 ME909s LTE/UMTS/GPRS Modem

没有这个数据库,你就得靠猜或者反向抓包才能拿到这些信息。

安全审计:谁偷偷插了U盘?

在高安全等级环境中,任何未授权的USB存储接入都是风险点。结合auditd或自定义监控脚本,一旦发现新设备接入,立刻提取其VID/PID并对照usb.ids查询:

# 示例:从sysfs获取最新插入设备信息 VENDOR=$(cat /sys/bus/usb/devices/$(ls /sys/bus/usb/devices | tail -1)/idVendor) PRODUCT=$(cat /sys/bus/usb/devices/$(ls /sys/bus/usb/devices | tail -1)/idProduct) curl -s http://www.linux-usb.org/usb.ids | grep -i "$VENDOR" | grep -i "$PRODUCT"

如果结果显示这是一个常见的闪存盘品牌(如SanDisk、Kingston),那就要触发告警流程了。甚至有些组织会建立内部白名单,只有登记过的设备才允许使用。


工具链早已集成,只是你没注意

很多你以为“天生智能”的命令,其实都在默默引用这份数据。

工具如何利用 usb.ids
lsusb若本地缓存了 usb.ids,会直接显示厂商/设备名而非仅ID
lshw-class bridge-short输出中增强USB节点可读性
Wireshark抓包分析USB通信时,协议层可标注设备名称
udevadm info结合规则匹配,辅助调试设备绑定过程

甚至一些图形化设备管理器(如GNOME的“磁盘”工具)也会间接依赖它来提升用户体验。

更进一步,已经有多个开源项目将其转换为结构化格式供程序调用:

  • GitHub上有大量将usb.ids转为 JSON/YAML 的解析脚本
  • Python库如pyusb可选加载映射表以增强日志输出
  • Node.js、Go等语言也有相应封装,方便构建Web版查询工具

这意味着你可以轻松搭建一个内部API接口,让团队成员通过HTTP请求查询设备身份:

GET /device?vid=067b&pid=2303 { "vendor": "Prolific Technology, Inc.", "product": "PL2303 Serial (IODATA USB-RSAQ2)" }

数据不准?那就一起改!

最难得的是,这个项目不仅开放访问,还高度鼓励社区贡献

如果你买了个新设备,发现不在列表里怎么办?

官方提供了明确的提交路径:http://www.linux-usb.org/usb-ids.html

支持两种方式:
1. 填网页表单(适合普通用户)
2. 发送标准 diff 补丁邮件(开发者最爱)

例如你要添加自家公司的开发板调试器:

--- old 2024-05-01 +++ new 2024-05-01 @@ -1234,0 +1235 @@ +abcd MyCustomTech Co., Ltd + 0001 DevBoard-X1 Debug Adapter

只要把这段补丁发给维护者linux.usb.ids@gmail.com,经过审核就会合并进主库。下一次别人再遇到abcd:0001,就能一眼认出这是你家的产品了。

这种“人人可参与”的模式,正是它能持续更新二十多年、覆盖数万个设备的根本原因。


还有哪些相关资源值得掌握?

除了主站之外,围绕USB设备识别还有不少实用工具和知识延伸:

usbmon —— 内核级USB流量监听

Linux内置的usbmon接口可以捕获所有USB总线上的原始数据包。配合Wireshark使用,能深入分析设备握手过程、控制请求、端点通信等细节。

启用方法简单:

modprobe usbmon # 然后查看 /sys/kernel/debug/usb/usbmon/

这对于排查设备枚举失败、驱动初始化异常等问题极为有用。

更详细的设备信息查看方式

除了lsusb,还可以试试:

# 查看详细属性树 usb-devices # 或指定设备查看 udevadm info --name=/dev/ttyUSB0 --attribute-walk

这些命令往往能揭示更多关于电源管理、接口类、子类、协议类型的信息,帮助你判断设备是否正常加载了功能类驱动(如CDC ACM、HID、MSC等)。

构建本地离线查询库

考虑到网络不稳定或内网环境限制,建议定期同步一份最新的usb.ids到本地,并编写轻量脚本实现快速检索:

#!/bin/bash # usb-lookup.sh grep -i "$1" /path/to/local/usb.ids | grep -A1 "$1" | tail -n +2

配合alias使用,效率翻倍:

alias vid='usb-lookup.sh' vid 067b

别让一个陌生的VID卡住你的进度

说到底,技术工作的本质之一就是把未知变成已知。而linux-usb.org/usb.ids正是一个将冷冰冰的十六进制数字转化为有意义信息的强大桥梁。

无论是你在开发驱动、配置udev规则、做IoT设备适配,还是仅仅想搞清楚工位上那个“Unknown USB Device”到底是谁插的,这个网站都值得你收藏、熟悉、甚至参与共建。

下次看到idVendor=xxxx, idProduct=yyyy,别急着重启或拔掉——先去查查它的身份吧。也许答案就在那张看似平凡的文本表里。

维护者:Stephen J. Gowdy linux.usb.ids@gmail.com
最近更新时间(示例):2024.05.01
主页直达:👉 http://www.linux-usb.org/usb.ids

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:56:59

消费级GPU微调210亿参数GPT-20b全指南

消费级GPU微调210亿参数GPT-20b全指南:从零部署到高效训练 你有没有试过在自己的笔记本上跑一个210亿参数的大模型?不是推理,是微调——而且用的还是RTX 3060这种“老将”级别的显卡。听起来像天方夜谭?但随着 GPT-OSS-20B 的发布…

作者头像 李华
网站建设 2026/4/23 13:37:50

Ollama别名简化Anything-LLM模型调用

Ollama别名简化Anything-LLM模型调用 在本地部署大语言模型时,一个看似不起眼的小问题却频繁拖慢开发节奏:每次切换模型都要面对一长串复杂的名称——llama3:8b-instruct-q5_1、qwen:7b-chat-q4_K_M……这些冗长的标识不仅容易拼错,还让配置文…

作者头像 李华
网站建设 2026/4/23 13:59:13

DeepSeek-V2.5本地部署全指南:从环境到生产

DeepSeek-V2.5本地部署全指南:从环境到生产 在大模型落地日益成为企业刚需的今天,如何将像 DeepSeek-V2.5 这样的高性能语言模型稳定、高效地部署到本地或私有云环境中,已经成为AI工程团队的核心课题。不少开发者尝试过直接加载Hugging Face模…

作者头像 李华
网站建设 2026/4/23 12:22:24

YOLOv5训练自定义数据集全攻略

YOLOv5训练自定义数据集全攻略 在计算机视觉的实际项目中,我们常常需要让模型识别特定场景中的目标——比如工厂流水线上的缺陷零件、停车场里的特定车型,或是实验室里某种生物样本。通用的目标检测模型(如COCO预训练模型)虽然强…

作者头像 李华
网站建设 2026/4/23 13:58:38

多智能体系统的协同群集运动控制代码实现

随着分布式系统与人工智能技术的不断发展,多智能体系统(Multi-Agent Systems, MAS)在无人机编队、智能交通、机器人协作等领域展现出广泛的应用前景。其中,协同群集运动控制作为多智能体系统的核心研究方向之一,旨在通…

作者头像 李华
网站建设 2026/4/23 12:13:02

Qwen-Image深度解析:20B参数中文图像生成突破

Qwen-Image深度解析:20B参数中文图像生成突破 在广告公司设计部门的深夜加班现场,设计师小李正为一个紧急的品牌海报项目焦头烂额——客户要求将“华为”中文字体精准还原成其品牌手册中的定制款黑体,还要嵌入未来城市背景中。他尝试了多个主…

作者头像 李华