驅動程式 - Linux Device Driver (LDD) - 使用範例 - C/C++ (Debian) - Enumerate PCI Device



main.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/pci.h>
 
int ldd_init(void)
{
    struct pci_dev *pdev = NULL;

    for_each_pci_dev(pdev)
        printk("PCI Device: %04x:%02x:%02x.%d "
                "Vendor=%04x Device=%04x "
                "Class=%06x\n",
                pci_domain_nr(pdev->bus),
                pdev->bus->number,
                PCI_SLOT(pdev->devfn),
                PCI_FUNC(pdev->devfn),
                pdev->vendor,
                pdev->device,
                pdev->class >> 8
        );

    return 0;
}
  
void ldd_exit(void)
{
}
  
module_init(ldd_init);
module_exit(ldd_exit);
  
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Steward Fu");
MODULE_DESCRIPTION("Linux Driver");

$ sudo dmesg
    [33818.475592] PCI Device: 0000:00:00.0 Vendor=8086 Device=0150 Class=000600
    [33818.475600] PCI Device: 0000:00:02.0 Vendor=8086 Device=0152 Class=000300
    [33818.475602] PCI Device: 0000:00:14.0 Vendor=8086 Device=1e31 Class=000c03
    [33818.475604] PCI Device: 0000:00:16.0 Vendor=8086 Device=1e3a Class=000780
    [33818.475605] PCI Device: 0000:00:16.3 Vendor=8086 Device=1e3d Class=000700
    [33818.475607] PCI Device: 0000:00:19.0 Vendor=8086 Device=1502 Class=000200
    [33818.475608] PCI Device: 0000:00:1a.0 Vendor=8086 Device=1e2d Class=000c03
    [33818.475610] PCI Device: 0000:00:1b.0 Vendor=8086 Device=1e20 Class=000403
    [33818.475611] PCI Device: 0000:00:1d.0 Vendor=8086 Device=1e26 Class=000c03
    [33818.475613] PCI Device: 0000:00:1f.0 Vendor=8086 Device=1e47 Class=000601
    [33818.475614] PCI Device: 0000:00:1f.2 Vendor=8086 Device=1e02 Class=000106
    [33818.475616] PCI Device: 0000:00:1f.3 Vendor=8086 Device=1e22 Class=000c05