无法访问特定PCIe设备的内存映射区域

时间:2018-02-02 10:07:18

标签: x86 linux-device-driver pci-e

我正在开发基于x86的64位系统。有问题的设备是eMMC控制器,具有64位内存映射区域。我试图通过BAR指向的地址访问第一个区域,但我只能读取0xffffffff(0xffffffff_ffffffff用于64位读取)。我已经尝试使用/ dev / mem明确使用BAR和pciemem来读取/ sys / devices / pcie / xxxxxx / resource0并获得相同的结果。

如果我在其他PCIe设备(例如USB控制器)上使用相同的逻辑,我可以毫无问题地读取内存。我已经浏览了内核源代码,发现两个设备驱动程序都在使用类似的request_region调用,其中exclusive_flag = 0(允许用户空间访问PCIe内存)。不过,我只对eMMC控制器有这个问题。打开resource0或mmapping / dev / mem也不会抛出任何错误。我需要找出为什么我会看到0xffffffff以及解决此问题的方法。

另一个重要的信息是我可以从引导程序访问这些寄存器。 Linux启动后无法访问它们,所以我的猜测是它与内存访问权限有关,而不是硬件锁来读取某些寄存器。

1 个答案:

答案 0 :(得分:0)

问题已解决。被测设备处于挂起状态,经确认

cat /sys/devices/pcie../.../power/runtime_status

以下命令使设备进入 ON 状态,之后内存空间正常运行:

cat "on" /sys/devices/pcie../.../power/runtime_status