0%

Dump PCIe设备BAR寄存器

下载后编译即可,可能需要安装readline和curses库。
gcc pci_debug.c -lreadline -lcurses -o pci_debug

这个小工具的用法很简单,看help就可以懂:

pci_debug -s
可以进入一个命令行交互界面。
(这个工具有一个bug,就是不支持设备有domain号, 对于有domain号的设备可以打上如
下的补丁)

输入命令:d addr len 查看地址addr开始的len个单位的数值,这里的单位default数值是
32bit。

  q退出工具。

      e改变大小端。
  ...

这个工具需要sudo或者root权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff --git a/pci_debug.c b/pci_debug.c
index f746840..30f4d45 100644
--- a/pci_debug.c
+++ b/pci_debug.c
@@ -177,9 +177,9 @@ int main(int argc, char *argv[])
*/

/* Extract the PCI parameters from the slot string */
- status = sscanf(slot, "%2x:%2x.%1x",
- &dev->bus, &dev->slot, &dev->function);
- if (status != 3) {
+ status = sscanf(slot, "%4x:%2x:%2x.%1x",
+ &dev->domain, &dev->bus, &dev->slot, &dev->function);
+ if (status != 4) {
printf("Error parsing slot information!\n");
show_usage();
return -1;