I need to get Vendor ID and Device ID of all PCI bus Devices from Linux using C/C++ (inline asm allowed), but I can't even understand from what to start.
Please, give me some pieces of advice or code parts.
How to get Vendor ID and Device ID of all PCI Devices?
In short, you have to write a C program that does:
grep PCI_ID /sys/bus/pci/devices/*/uevent
Sample output lines:
/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
And extract relevant data after =
and after :
.
So what you have to do is:
/sys/bus/pci/devices
with readdir_r
PCI_ID
is foundsscanf(line, "PCI_ID=%4x:%4x\n", &vendor_id, &device_id)
I couldn't find any documentation about uevent
inside /sys/bus/pci/devices
. This answer is based on reverse engineering busybox lspci.c sources.