如何获取所有 PCI 设备的供应商 ID 和设备 ID?

How to get Vendor ID and Device ID of all PCI Devices?

我需要使用 C/C++(允许内联汇编)从 Linux 获取所有 PCI 总线设备的供应商 ID 和设备 ID,但我什至无法理解从何开始.

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

How to get Vendor ID and Device ID of all PCI Devices?

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

grep PCI_ID /sys/bus/pci/devices/*/uevent

并提取=后和:后的相关数据。

所以你要做的是:

  • 使用 readdir_r
  • 遍历 /sys/bus/pci/devices 中的目录
  • 每个目录
    • 从该目录中打开 uevent 文件
    • 从文件中读取行直到找到 PCI_ID
    • 如果找到
      • sscanf(line, "PCI_ID=%4x:%4x\n", &vendor_id, &device_id)
      • 基本匹配

我在 /sys/bus/pci/devices 中找不到任何关于 uevent 的文档。本答案基于逆向工程 busybox lspci.c sources.