WINDOWS KMDF PCI 驱动程序:- API 用于将数据写入内存映射虚拟地址
WINDOWS KMDF PCI DRIVER:- API For Writing Data To MemoryMapped Virtual Address
我的任务是为 Windows 编写基于 KMDF 的 PCI 驱动程序。基本上 objective 是将数据写入 FGPGA 板上的 RAM(该板尚不存在)。 FPGA上的PCI接口将允许数据直接读取和写入FPGA RAM。
想法是将必要的内存映射信息存储在BAR0 寄存器中。内存描述符类型将是 CmResourceTypeMemory。第一步是读取 BAR0 寄存器信息并创建内存映射。
使用另一块板,我编写了一个执行上述操作的基本驱动程序。
但是,一旦我有了内存地址(虚拟),我就想从该内存中读取和写入。我注意到 windows 有 APIs 用于读写 PORTS 和 REGISTER。是否有等效于将各种数据写入和读取到虚拟地址的东西:- I.E.将数据缓冲区复制到虚拟地址。直接复制似乎是一种选择,但我怀疑可能有 API 来执行此操作。
我看过各种 github PCI 示例,但是它们倾向于使用寄存器和端口读写。
使用READ_REGISTER_BUFFER_xxx 和WRITE_REGISTER_BUFFER_xxx 例程。请参阅 MSDN 文档中的 HAL Library Routines 部分。
我的任务是为 Windows 编写基于 KMDF 的 PCI 驱动程序。基本上 objective 是将数据写入 FGPGA 板上的 RAM(该板尚不存在)。 FPGA上的PCI接口将允许数据直接读取和写入FPGA RAM。
想法是将必要的内存映射信息存储在BAR0 寄存器中。内存描述符类型将是 CmResourceTypeMemory。第一步是读取 BAR0 寄存器信息并创建内存映射。
使用另一块板,我编写了一个执行上述操作的基本驱动程序。
但是,一旦我有了内存地址(虚拟),我就想从该内存中读取和写入。我注意到 windows 有 APIs 用于读写 PORTS 和 REGISTER。是否有等效于将各种数据写入和读取到虚拟地址的东西:- I.E.将数据缓冲区复制到虚拟地址。直接复制似乎是一种选择,但我怀疑可能有 API 来执行此操作。
我看过各种 github PCI 示例,但是它们倾向于使用寄存器和端口读写。
使用READ_REGISTER_BUFFER_xxx 和WRITE_REGISTER_BUFFER_xxx 例程。请参阅 MSDN 文档中的 HAL Library Routines 部分。