我正在尝试从用户空间访问PCIe SATA桥接器的PCI BAR(#5),但每当我从BAR通过mmap()
/sys/bus/pci/devices/.../resource5
时,我在每个偏移处获得0xFF文件。其他设备(如英特尔SATA控制器)会响应合理的数据。
BAR显示在lspci -vv
中与英特尔控制器相同(只有地址不同)。
Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]
两个设备都与ahci
驱动程序匹配,SATA控制器也可以正常工作 - 我可以访问连接的磁盘。
我正试图从用户空间进行访问,因为我只是想在实验中注册寄存器。为此,我使用pcimem的修改形式,更改为访问我关心的寄存器。但是,任何偏移都返回0xFF,所以即使使用普通的pcimem:
pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w
返回0xFFFFFFFF(“w”表示读取“字”,因此4字节)。
当其他设备出现时,是什么阻止BAR5可以访问此设备?让这种用户空间访问PCI BAR甚至是否有意义?
答案 0 :(得分:2)
不确定这会有多大帮助,但是当我为新的PCIe FPGA器件编写驱动程序时,我看到了同样的事情。
当设备出现错误时,MMAP-ed PCI BAR存储空间将返回0xFFFFFFFF(-1)。我能够解决这个问题的唯一方法是通过计算机的完全电源重置来重置卡。
答案 1 :(得分:0)
我在调试NVMe hdds hotplug时遇到了同样的问题。 如果在GRUB提示之前PCIe插槽中有硬盘,则可以热插拔该插槽中的其他驱动器,如果没有,则pci_ioremap_bar()返回读取所有0xffffffff的内存区域。 奇怪的是。