hardware - 用户空间 PCI BAR 访问在每个偏移处返回 0xFF

标签 hardware linux-device-driver pci

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

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/

相关文章:

linux-kernel - Linux内存中的漏洞是什么意思?

linux - 使用不同的 IRQ 处理程序在 PCI 驱动程序中启用多个 MSI

caching - 如何为可缓存 PCIe BAR 进行 mmap

linux - 病毒何时可以影响外部硬盘驱动器?

.net - .7开发人员工作站的i7与Xeon

windows - COM 与 WMI 的信息提供

programming-languages - 他们用什么给这个玩具编程?

c - 我们是否需要 ioremap 来获取 memmap 保留的内存块?

linux - 关于epoll_insert的详细函数

linux - 现有内核驱动程序应如何初始化为 PCI 内存映射?