2012-07-09 18 views
16
  1. この呼び出しから返されるDMAアドレスは物理アドレスと同じですか? LDD3は、DMAアドレスがドライバによって不透明として扱われるべきだと言います。私はこのDMAバッファをmmapして、ユーザ空間がそれに直接読み書きできるようにしたい。問題は、remap_pfn_rangeにPFNを指定する必要があることです(これは私の気持ちが驚くほど(カーネル3.4+)はI/Oメモリと同じような従来のメモリでも機能します)。 DMAアドレスを符号なしlongにキャストしてPFNに変換できますか?これは、LDD3が不透明感について語ったことの違反ではありませんか?dma_alloc_coherentに関するいくつかの質問

  2. dma_alloc_coherentは常に内部で__get_free_pagesを使用しますか?これは、領域が常にオーバー割り当てされる可能性があることを意味しますか?(最初の関数はバイトを使用しますが、2番目の関数はページ単位で割り当てます)

  3. __get_free_pagesを呼び出して取得した複数の連続するページに対して、単一のストリーミングマッピングを設定する方法はありますか? dma_map_pageは1ページにのみ適用されます。

+0

remap_pfn_rangeメモリにdmaメモリを接続する正しい方法がありますか? – Luca

答えて

11
  1. いいえ、返されたアドレスは、そうしないと、カーネル空間からアクセスすることはできないであろう、仮想アドレスです。物理アドレスを表すdma_handleですが、不透明です。返されるアドレスにvirt_to_physを使用し、remap_pfn_rangeに渡す必要があります。

  2. 私は(それはプラットフォームに依存する可能性が高い)とは思わないが、ページを割り当てる。 DMAのメモリ量を少なくしたい場合は、dma_pool_createを使用してそこから領域を割り当てる必要があります。

  3. dma_map_pageの代わりにdma_map_singleを使用できます。

このようなものの詳細については、DMA-API.txtにお問い合わせください。

関連する問題