我们正在为使用WDF for Windows 7的定制PCI-Express设备编写基于DMA的驱动程序。
如您所知,PCI-Express总线事务不允许跨越4k内存边界。自定义设备不检查这一点,因此我们需要确保驱动程序仅请求与4k内存边界对齐的DMA传输。
设备的配置文件是WdfDmaProfilePacket64。
我们尝试使用WdfDeviceSetAlignmentRequirement(DevExt-> Device,4095),但这不会导致DMA起始地址正确对齐。
我们如何配置WDF框架以便它只请求正确对齐的地址?
答案 0 :(得分:0)
您可以在用户空间应用程序中处理此问题,以某种方式在用户空间中启动/分配对齐的内存,然后将其发送到内核程序。驱动程序对齐已经分配和启动的内存并不容易。即使在用户空间应用程序中,我们也必须分配额外的空间,然后使用对齐的部分(我知道,它不漂亮,这就是为什么我建议在设备端解决这个问题)
例如,如果您在用户空间应用程序中使用C ++,则可以执行this
之类的操作