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 に答える