Steward
分享是一種喜悅、更是一種幸福
驅動程式 - Linux Device Driver (LDD) - 使用範例 - C/C++ (Debian) - Dump PCI Config
main.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/pci.h>
int ldd_init(void)
{
int i = 0;
int j = 0;
int p = 0;
u32 val[8] = { 0 };
struct pci_dev *pdev = NULL;
for_each_pci_dev(pdev) {
printk("\nPCI 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
);
for (i = 0; i < 8; ++i) {
for (j = 0; j < 8; ++j) {
pci_read_config_dword(pdev, p, &val[j]);
p += 4;
}
printk("%02x: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
i * 32,
val[0],
val[1],
val[2],
val[3],
val[4],
val[5],
val[6],
val[7]
);
}
}
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
PCI Device: 0000:00:00.0 Vendor=8086 Device=0150 Class=000600
[36818.854080] 00: 0x01508086 0x30900006 0x06000009 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
[36818.854084] 20: 0x00000000 0x00000000 0x00000000 0x05771028 0x00000000 0x000000e0 0x00000000 0x00000000
[36818.854088] 40: 0xfed19001 0x00000000 0xfed10001 0x00000000 0x00000211 0x00000011 0xdf900007 0xdb000001
[36818.854092] 60: 0xf8000005 0x00000000 0xfed18001 0x00000000 0xfe000000 0x00000002 0xfe000c00 0x0000007f
[36818.854096] 80: 0x01111110 0x00110000 0x0000001a 0x00000000 0xfe000001 0x00000002 0x1e500001 0x00000003
[36818.854100] a0: 0x00000001 0x00000003 0x1e600001 0x00000003 0xdba00001 0xdb800001 0xdb000001 0xdfa00001
[36818.854104] c0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
[36818.854108] e0: 0x010c0009 0xe200a092 0x044000d0 0x00000000 0x00000000 0x00000000 0x00090fc8 0x00000000
$ lspci -s 00:00.0 -xxx
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)
00: 86 80 50 01 06 00 90 30 09 00 00 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 28 10 77 05
30: 00 00 00 00 e0 00 00 00 00 00 00 00 00 00 00 00