Linux kernel 为什么setpci和lspci-xxxx为同一地址显示不同的数据?

Linux kernel 为什么setpci和lspci-xxxx为同一地址显示不同的数据?,linux-kernel,embedded,linux-device-driver,device-driver,pci-e,Linux Kernel,Embedded,Linux Device Driver,Device Driver,Pci E,在我的x86 Linux系统上,使用setpci从PCI配置空间的不同位置读取数据,与lspci-xxxx的输出相比,对于某些寄存器,似乎给出了完全不同的答案 例如,我在总线上选择一个任意设备,然后执行lspci-s 00:1f.3-xxxx并获得: 00: 86 80 22 1e 03 00 80 02 04 00 05 0c 00 00 00 00 10: 04 40 51 d0 00 00 00 00 00 00 00 00 00 00 00 00 20: a1 ef 00 00 00 0

在我的x86 Linux系统上,使用
setpci
从PCI配置空间的不同位置读取数据,与
lspci-xxxx
的输出相比,对于某些寄存器,似乎给出了完全不同的答案

例如,我在总线上选择一个任意设备,然后执行
lspci-s 00:1f.3-xxxx
并获得:

00: 86 80 22 1e 03 00 80 02 04 00 05 0c 00 00 00 00
10: 04 40 51 d0 00 00 00 00 00 00 00 00 00 00 00 00
20: a1 ef 00 00 00 00 00 00 00 00 00 00 28 10 8b 05

现在,
setpci-s 00:1f.3 0x40+0.l
的输出是
02800003
,这与上面的输出一致。但是,
setpci-s 00:1f.3 0xf8+0.l
的输出是
ffffffff
,从上面的转储中,我希望它是
08040f87

谁能帮我弄清楚这里发生了什么事吗。我是PCI调试的新手,所以我可能在这里遗漏了一些明显的东西

提前谢谢。

man setpci setpci是一个用于查询和配置PCI设备的实用程序

根权限对于几乎所有操作都是必需的,不包括在某些操作系统上读取配置空间的标准头。有关访问权限的详细信息,请参阅lspci(8)


作为超级用户试一试

这个问题似乎离题了,因为应该在超级用户网站上提问,我认为这不会比超级用户网站上的问题少。如果嵌入式系统开发中存在堆栈溢出,我会错过更合适的。哇,我真不敢相信我错过了!谢谢
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 87 0f 04 08 00 00 00 00