3

現在、FPGA で開発されたカスタム モジュールを使用する Linux ドライバーを開発しようとしています。そのために、2 つの ARM コアで動作する Linux ディストリビューションを備えたザイリンクス Zynq SoC を使用し、VHDL モジュールは FPGA 部分に実装されていますが、これは問題を理解する上であまり重要ではありません。

FPGA モジュールは RAM に直接書き込みます。書き込まれた内容をドライバーで読み取りたいのですが、キャッシュ メモリが原因で問題が発生します。ドライバーは RAM ではなくキャッシュから読み取るため、古いデータを読み取ります。

FPGA が書き込み可能なメモリ空間を定義するには、kmalloc 関数を使用します。キャッシュの代わりに RAM メモリからの読み取りを強制するために使用できるフラグが存在するかどうか知っていますか?

私が探しているものである可能性のある2つのフラグを見ましたが、それらが何をするのかよくわかりません:

__GFP_COLD : キャッシュ ウォーム ページを返す代わりに、キャッシュ コールド ページを要求します。--> まだキャッシュされていないページの使用を強制するだけだと思いますが、後でキャッシュします。あれは正しいですか ?

GFP_DMA : 私が探しているのは、DMA と互換性のあるメモリの一部を強制的に使用することだけを読んでいるようです。

kmalloc で作成した配列のキャッシュを無効にするにはどうすればよいですか? または、少なくともキャッシュから読み取る代わりにプロセッサにRAMから読み取るように強制するにはどうすればよいですか?

ご協力ありがとうございました !

4

1 に答える 1

3

I think I found what I was looking for this morning.

I discovered the function dma_alloc_coherent(), and it seems to do exactly what I am looking for.

More information about this function can be found here :

https://www.kernel.org/doc/Documentation/DMA-API.txt

and here :

https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt.

于 2016-03-21T14:44:54.590 に答える