手把手教你用lspci和Windows设备管理器,实战查询PCIe设备的Vendor ID和Subsystem ID

张开发
2026/4/14 12:59:46 15 分钟阅读

分享文章

手把手教你用lspci和Windows设备管理器,实战查询PCIe设备的Vendor ID和Subsystem ID
实战指南跨平台精准获取PCIe设备关键ID的完整流程在硬件开发与系统调试过程中准确识别PCIe设备的各类ID是每位工程师的必备技能。无论是为特定设备编写驱动程序还是排查硬件兼容性问题亦或是逆向工程分析掌握这些关键标识符的提取方法都至关重要。本文将带您深入探索在Linux和Windows两大主流操作系统中如何高效获取Vendor ID、Device ID、Subsystem Vendor ID和Subsystem ID并理解它们背后的实际意义。1. PCIe设备ID系统解析PCIe设备的标识系统采用分层设计理念这种精妙的结构既考虑了芯片制造商的需求也兼顾了板卡集成商的灵活性。理解这套系统的工作原理是后续实际操作的基础。1.1 核心ID的作用与关联现代PCIe设备实际上包含两组相互关联但又各司其职的标识符组合芯片级标识Vendor ID由PCI-SIG统一分配的16位编码代表芯片原始制造商Device ID由芯片制造商自主定义的16位编码标识具体芯片型号板卡级标识Subsystem Vendor ID标识将芯片集成到最终产品的板卡制造商Subsystem ID板卡制造商定义的具体产品型号编码这种分层结构完美解决了半导体行业的生态特点——芯片制造商如Intel、NVIDIA生产的芯片会被众多板卡厂商如华硕、技嘉采购并集成到各自的终端产品中。1.2 典型ID组合示例以下是一个实际案例的分解ID类型示例值对应厂商/产品Vendor ID0x10DENVIDIA CorporationDevice ID0x1C81GeForce GTX 1080芯片Subsystem Vendor ID0x1043ASUS (华硕)Subsystem ID0x8670ROG STRIX系列显卡这个组合告诉我们这是一款采用NVIDIA GTX 1080芯片的华硕ROG STRIX系列显卡。驱动程序可以根据这些完整信息加载最适合的版本和配置参数。2. Linux环境下使用lspci工具实战对于Linux用户lspci是最直接有效的PCIe设备信息查询工具。这个命令行工具直接读取系统的PCI配置空间提供丰富的设备信息。2.1 基础命令与输出解析执行以下命令获取详细设备列表lspci -nnv典型输出示例01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1080] [10de:1c81] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:8670] ...关键信息提取要点[10de:1c81]Vendor ID(10de)与Device ID(1c81)Subsystem [1043:8670]Subsystem Vendor ID(1043)与Subsystem ID(8670)2.2 高级过滤与格式化技巧当系统中有多个PCIe设备时可以使用以下命令精准定位lspci -nnv | grep -A 10 VGA如需更简洁的ID专用输出格式lspci -nn | awk {print $1,$3,$4,$5}2.3 自动化脚本处理对于需要批量处理多个设备的场景可以编写简单的shell脚本#!/bin/bash for dev in $(lspci | awk {print $1}); do echo Device $dev: lspci -nns $dev | awk -F[][] {print Vendor:Device $2\n Subsystem $4} done3. Windows平台设备管理器深度应用Windows系统虽然以图形界面为主但其设备管理器同样提供了完整的PCIe设备信息访问途径只是需要掌握正确的查看方法。3.1 分步操作指南打开设备管理器右键点击此电脑 → 管理 → 设备管理器或按WinR输入devmgmt.msc回车定位目标设备展开相关类别如显示适配器右键点击设备 → 属性查看硬件ID切换到详细信息选项卡在属性下拉菜单中选择硬件ID3.2 硬件ID字符串解码典型的硬件ID格式如下PCI\VEN_10DEDEV_1C81SUBSYS_86701043REV_A1解码规则VEN_10DEVendor ID 0x10DEDEV_1C81Device ID 0x1C81SUBSYS_86701043前4位8670 Subsystem ID后4位1043 Subsystem Vendor ID3.3 PowerShell自动化查询对于需要批量查询的场景可以使用PowerShell脚本Get-PnpDevice | Where-Object {$_.InstanceId -like PCI*} | ForEach-Object { $hwid $_.HardwareID[0] if($hwid -match VEN_(\w)DEV_(\w)SUBSYS_(\w{4})(\w{4})) { [PSCustomObject]{ Device $_.FriendlyName VendorID 0x$($Matches[1]) DeviceID 0x$($Matches[2]) SubsystemID 0x$($Matches[3]) SubsystemVendorID 0x$($Matches[4]) } } }4. PCI ID数据库的实战应用获取到各类ID后下一步就是查询这些编码对应的具体厂商和产品信息。PCI ID数据库是最权威的公开资源。4.1 在线数据库查询技巧访问pci-ids.ucw.cz网站可以直接输入Vendor ID查询厂商名称组合Vendor ID Device ID查询具体芯片型号通过Subsystem信息确认最终产品品牌查询示例流程输入Vendor ID 10de → 显示NVIDIA点击NVIDIA → 输入Device ID 1c81 → 显示GP104 [GeForce GTX 1080]在子系统部分查找1043 → 显示ASUSTeK Computer Inc.匹配Subsystem ID 8670 → 确认具体产品型号4.2 本地数据库维护对于需要频繁查询或离线使用的场景可以考虑下载完整的PCI ID数据库wget https://pci-ids.ucw.cz/v2.2/pci.ids然后使用grep进行本地查询grep -i 10de pci.ids4.3 常见问题排查当数据库查询无结果时可能的原因包括新发布的设备尚未被数据库收录OEM定制设备使用了私有ID输入ID时字母大小写错误数据库通常不区分大小写特殊设备类别需要查询其他专业数据库5. 高级应用场景与技巧掌握了基础ID查询方法后这些技能可以在多个专业领域发挥重要作用。5.1 驱动开发中的ID应用在驱动程序代码中通常需要定义支持的设备ID表static const struct pci_device_id my_driver_ids[] { { PCI_DEVICE(0x10de, 0x1c81) }, { PCI_DEVICE(0x8086, 0x15bb) }, { 0, } }; MODULE_DEVICE_TABLE(pci, my_driver_ids);5.2 硬件兼容性测试制作兼容性清单时完整的ID信息至关重要| 测试设备 | Vendor ID | Device ID | Subsystem ID | |----------------|-----------|-----------|--------------| | NVIDIA GTX 1080 | 0x10DE | 0x1C81 | 0x86701043 | | Intel I350网卡 | 0x8086 | 0x1521 | 0x00008086 |5.3 虚拟化设备透传配置在配置PCIe设备直通(passthrough)时需要准确指定设备IDhostdev modesubsystem typepci managedyes source address domain0x0000 bus0x01 slot0x00 function0x0/ /source address typepci domain0x0000 bus0x00 slot0x10 function0x0/ /hostdev5.4 逆向工程分析通过已知ID信息可以推断未知设备的基本属性发现新设备Vendor ID为0x1dcf查询数据库显示属于Microchip Technology结合设备类别(Class Code)可判断可能是USB控制器或FPGA设备在实际项目调试中经常会遇到需要验证硬件ID是否与预期一致的场景。比如最近在为一个客户排查显卡驱动兼容性问题时发现设备管理器显示的Subsystem ID与官方文档存在差异最终确认是OEM厂商使用了自定义编码。这种情况下能够准确提取并解读各个ID字段就成为了解决问题的关键。

更多文章