我试图从用户空间访问PCIe SATA桥的PCI (#5),但是每当我通过/sys/bus/pci/devices/.../resource5从BAR访问mmap()时,我在文件中的每个偏移量都得到0xFF。其他设备(如Intel SATA控制器)会使用敏感数据进行响应。
栏在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返回0xFFFFFFFFF ("w“表示"word”读取,因此为4字节)。
当其他设备可以访问时,是什么原因导致此设备的BAR5无法访问?让这种用户空间访问PCI BARs有意义吗?
发布于 2013-03-21 20:44:15
不确定这会有多大帮助,但我在为新的PCIe FPGA设备编写驱动程序时也看到了同样的情况。
当设备上出现错误时,MMAP-ed PCI BAR内存空间将返回0xFFFFFFFF (-1)。我能够解决这个问题的唯一方法是通过计算机的完全电源重置来重置该卡。
发布于 2017-07-25 18:39:54
我在调试NVMe硬盘热插拔时也遇到过同样的问题。如果在GRUB提示之前PCIe插槽中有硬盘,您可以热插拔该插槽中的其他驱动器,如果没有,pci_ioremap_bar()将返回内存区域,读取所有0xffffffff。奇怪的狗屎。
https://stackoverflow.com/questions/15528469
复制相似问题