当内存可预取时,读取和写入端点设备的 pcie 内存

当内存可预取时,读取和写入端点设备的 pcie 内存

因此,我的问题是我无法读取或写入为 pcie 开放的预取内存。我有两种不同的设置:

1 - 我有一个 Linux 内核 4.9 根复合设备,还有一个 4.9 设备作为端点。我能够对该设备进行寻址,因此我应该能够读取或写入它。但不知何故,我读到的都是乱码。

2 - 我有相同的根复合设备和裸机设备作为端点。我也能寻址设备的 BAR,但当我写入时,它会拒绝写入(我可以在 JTAG 调试器上看到内存),而且当我读取它时,它会为一个字返回 0xFFFF(顺便说一下,内存与 0xFFFF 不同)。

我研究过 pci 上的预取内存,但只发现了这些:

  • pci 交换机可以通过字节合并(将字节合并为一个字)对端点设备执行写入操作。由于我正在写入一个字,因此问题应该与此无关。
  • 从可预取内存读取不会造成副作用。(这似乎不是一个问题。)

感谢您的时间,如果需要,我很乐意澄清我的设置或案例。

編輯註釋:

我还有一些进展想告诉你们:裸机根复合体可以访问另一个根复合体的内存,即使它是可预取的。因此,通常的怀疑对象似乎是内核的默认驱动程序。

答案1

谢谢大家,问题似乎出在端点设备本身,已经解决了。

相关内容