1

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

您可能知道,PCI-Express 总线事务不允许跨越 4k 内存边界。自定义设备不检查这一点,因此我们需要确保驱动程序只请求与 4k 内存边界对齐的 DMA 传输。

设备的配置文件是 WdfDmaProfilePacket64。

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

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

4

1 回答 1

0

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

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

于 2017-04-17T06:55:20.597 回答