如何获取所有 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.
我需要使用 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
遍历 - 每个目录
- 从该目录中打开 uevent 文件
- 从文件中读取行直到找到
PCI_ID
- 如果找到
- 与
sscanf(line, "PCI_ID=%4x:%4x\n", &vendor_id, &device_id)
基本匹配
- 与
/sys/bus/pci/devices
中的目录
我在 /sys/bus/pci/devices
中找不到任何关于 uevent
的文档。本答案基于逆向工程 busybox lspci.c sources.