3

我正在尝试从用户空间访问 PCIe SATA 桥的 PCI BAR (#5),但是每当我mmap()通过 BAR 从 BAR/sys/bus/pci/devices/.../resource5时,文件中的每个偏移量都会得到 0xFF。其他设备(例如 Intel SATA 控制器)以敏感数据响应。

BAR 的显示lspci -vv与 Intel 控制器相同(只是地址不同)。

Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]

两个设备都与ahci驱动程序匹配,否则 SATA 控制器工作 - 我可以访问附加的磁盘。

我正在尝试从用户空间访问,因为我现在只想通过实验戳一下寄存器。为此,我使用了pciem的修改形式,更改为访问我关心的寄存器。但是,任何偏移量都会返回 0xFF,因此即使使用普通 pciem:

pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w

返回 0xFFFFFFFF(“w”表示读取的“字”,因此是 4 个字节)。

当其他设备可以访问时,是什么阻止了此设备的 BAR5?让这种用户空间访问 PCI BAR 是否有意义?

4

2 回答 2

2

不确定这会有多大帮助,但当我为新的 PCIe FPGA 设备编写驱动程序时,我看到了同样的事情。

当设备出现错误时,MMAP-ed PCI BAR 内存空间将返回 0xFFFFFFFF (-1)。我能够解决此问题的唯一方法是通过计算机的完全电源重置来重置卡。

于 2013-03-21T12:44:14.523 回答
0

我在调试 NVMe 硬盘热插拔时遇到了同样的问题。如果在 GRUB 提示之前 PCIe 插槽中有一个硬盘,您可以在该插槽中热插拔其他驱动器,如果没有,pci_ioremap_bar() 返回读取所有 0xffffffff 的内存区域。奇怪的狗屎。

于 2017-07-25T10:39:54.367 回答