DMA事务的内存对齐(Windows驱动程序基础)



我们正在为使用WDF for Windows 7的定制PCI Express设备编写一个基于DMA的驱动程序。

正如您所知,PCI Express总线事务不允许跨越4k内存边界。自定义设备不会对此进行检查,因此我们需要确保驱动程序只请求与4k内存边界对齐的DMA传输。

设备的配置文件为WdfDmaProfilePack 64。

我们尝试使用WdfDeviceSetAlignmentRequirement(DevExt->Device,4095),但这不会导致DMA开始地址正确对齐。

我们如何配置WDF框架,使其只请求正确对齐的地址?

您可以在用户空间应用程序中处理此问题,以某种方式启动/分配用户空间中的对齐内存,然后将其发送到内核程序。对于驱动器来说,对齐已经分配和启动的存储器是不容易的。即使在用户空间应用程序中,我们也必须分配额外的空间,然后使用对齐的部分(我知道,这并不漂亮,这就是为什么我建议在设备端解决这个问题)

例如,如果您将C++用于用户空间应用程序,则可以执行类似的操作

最新更新