我正在尝试从用户空间访问 PCIe SATA 桥接器的 PCI BAR(#5),但是每当我通过 /sys/bus/pci 从 BAR
,我在文件中的每个偏移处得到 0xFF。其他设备(例如 Intel SATA Controller )以敏感数据响应。mmap()
/devices/.../resource5
BAR 显示在 lspci -vv
中,与 Intel Controller 相同(只是地址不同)。
Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]
这两个设备都与 ahci
驱动程序匹配,SATA Controller 以其他方式工作 - 我可以访问附加的磁盘。
我正在尝试从用户空间访问,因为我现在只想实验性地戳一下寄存器。为此,我使用了 pcimem 的修改形式,更改为访问我关心的寄存器。但是,任何偏移量都会返回 0xFF,因此即使使用普通 pcimem:
pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w
返回 0xFFFFFFFF(“w”表示一个“字”读取,因此是 4 个字节)。
当其他设备可以访问时,是什么阻止了此设备的 BAR5 的访问?让这种用户空间访问 PCI BAR 有意义吗?
最佳答案
不确定这会有多大帮助,但我在为新的 PCIe FPGA 设备编写驱动程序时看到了同样的事情。
当设备出现错误时,MMAP-ed PCI BAR 内存空间将返回 0xFFFFFFFF (-1)。我能够解决这个问题的唯一方法是通过计算机的完全电源重置来重置卡。
关于hardware - 用户空间 PCI BAR 访问在每个偏移处返回 0xFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528469/