linuxpci

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


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.


Solution

  • 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:

    I couldn't find any documentation about uevent inside /sys/bus/pci/devices. This answer is based on reverse engineering busybox lspci.c sources.