如何获取所有PCI设备的Vendor ID和Device ID?

And*_*kiy 3 linux pci

我需要使用 C/C++(允许内联汇编)从 Linux 获取所有 PCI 总线设备的供应商 ID 和设备 ID,但我什至不明白从哪里开始。

请给我一些建议或代码部分。

Kam*_*Cuk 5

如何获取所有PCI设备的Vendor ID和Device ID?

简而言之,您必须编写一个 C 程序来执行以下操作:

grep PCI_ID /sys/bus/pci/devices/*/uevent
Run Code Online (Sandbox Code Playgroud)

示例输出行:

/sys/bus/pci/devices/0000:00:00.0/uevent:PCI_ID=1022:14E8
/sys/bus/pci/devices/0000:00:00.2/uevent:PCI_ID=1022:14E9
/sys/bus/pci/devices/0000:00:01.0/uevent:PCI_ID=1022:14EA
/sys/bus/pci/devices/0000:00:02.0/uevent:PCI_ID=1022:14EA
Run Code Online (Sandbox Code Playgroud)

=并提取前后相关数据:

所以你要做的是:

  • 迭代/sys/bus/pci/deviceswith中的目录readdir_r
  • 对于每个目录
    • 从该目录中打开 uevent 文件
    • 从文件中读取行直到PCI_ID找到
    • 如果找到 - 基本上与该行匹配sscanf(line, "PCI_ID=%4x:%4x\n", &vendor_id, &device_id)

我找不到任何有关ueventinside 的文档/sys/bus/pci/devices。这个答案基于逆向工程busybox lspci.c 来源