我正在开发一个新的内核模式驱动程序,它应该在Windows 10(64位)上运行 .

此驱动程序应分配48GB的 continuous physical 内存,并将其(其基址)映射到将使用它的Windows应用程序的用户空间中的虚拟地址 . 系统实际上安装了64GB的RAM,因此可能需要通过更改引导条目信息来创建专用于此用途的一段内存 .

此外,驱动程序应以某种方式向位于PCIe插槽上的基于FPGA的设备显示其基址 . 这样做的目的,就是使用这个48GB的连续物理分配内存,作为DMA(直接内存访问) . 也就是说,基于FPGA的设备将生成数据,并将其写入DMA中的适当位置 . 主机软件将尝试以循环方式从该位置读取 . 也就是说,FPGA将覆盖缓冲区中的数据,主机将尝试保持速度,并在覆盖之前读取该数据 .

请注意,此问题仅涉及主机端(驱动程序),而不涉及FPGA端 .

所以,基本上我的问题是:

  • 如何进行这样的分配(如上所述)?

  • 如何将基本地址从内核空间中的虚拟地址映射到用户空间中的相应虚拟地址?

  • 如何向FPGA(位于PCIe插槽)上显示该基地址,以便知道在何处执行其写操作?

  • 在事件处理方面,此驱动程序应该实现哪些其他回调函数?

非常感谢!