【发布时间】:2018-02-01 17:41:30
【问题描述】:
我的任务是为 Windows 编写基于 KMDF 的 PCI 驱动程序。基本上,目标是将数据写入 FGPGA 板上的 RAM(该板尚不存在)。 FPGA 上的 PCI 接口将允许数据直接读取和写入 FPGA RAM。
这个想法是将必要的内存映射信息存储在BAR0寄存器中。内存描述符类型为 CmResourceTypeMemory。第一步是读取 BAR0 寄存器信息并创建内存映射。
使用另一块板,我编写了一个执行上述操作的基本驱动程序。
但是,一旦我有了内存地址(虚拟),我就想从该内存中读取和写入。我注意到 Windows 有用于读取和写入 PORTS 和 REGISTER 的 API。是否有等效的东西可以将各种数量的数据写入和读取到虚拟地址:-I.E.将数据缓冲区复制到虚拟地址。直接复制似乎是一种选择,但我怀疑可能有一个 API 可以执行此操作。
我查看了各种 github PCI 示例,但它们倾向于使用寄存器和端口读写。
【问题讨论】:
-
MmMapIoSpace 的返回值将是一个指针,可用于读写 FPGA RAM。
-
感谢您的回复。我使用 MmMapIoSpace 来获取虚拟地址。我打算使用 RtlCopyMemory 将数据复制到虚拟地址。该数据将来自 IORequest 缓冲区。目前我没有任何硬件可以确认这一点。