【问题标题】:Large PnP driver buffer大型 PnP 驱动程序缓冲区
【发布时间】:2014-09-07 14:30:42
【问题描述】:

我正在开发一个内核 PnP 驱动程序来映射我的 FPGA。当我使用非分散收集 DMA 时,我需要四个 32Mb 的连续内存缓冲区。现在我在使用 WdfCommonBufferCreate 分配它们时遇到问题,因为它有时可以工作,有时不能。我不明白为什么分配偶尔会失败,因为设备内存和设备没有改变。

有没有办法确保我的缓冲区会被创建?什么会导致零星失败?

我还考虑使用 Bcdedit 从 Windows 中删除 128Mb 并将剩余空间用于我的缓冲区。我这样做没有问题,因为驱动程序适用于受控环境中的特定平台,但我没有找到使用 Windows 驱动程序 API 了解内存大小的方法。

有没有办法知道实际内存的大小?我真的可以使用剩下的内存吗?如果可以,如何使用?

感谢您的帮助

【问题讨论】:

    标签: c windows memory kernel buffer


    【解决方案1】:

    这是很多连续的内存。如果您通过WdfDmaEnablerSetMaximumScatterGatherElements 告诉它您拥有的最大分散/收集描述符数量,Windows 驱动程序框架可以将大型 DMA 事务分解为您的驱动程序可以处理的大小。只需使用较小的固定数量的分散/聚集元素。

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 1970-01-01
      • 2017-07-01
      • 2015-08-31
      • 2015-12-15
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多