2

Linux Device Driver LDD3、DMA-API.txt、DMA-HOWTO.txt を読み、drivers/dma/dmatest.c も調べましたが、dma 転送を開始する方法がわかりませんでした。メモリのマッピングについてはすべて議論されていますが、トランザクションを開始する方法については議論されていません。PCI サンプル ドライバーには転送機能がありますが、「特定の」DMA 操作を使用しており、ハードウェアに依存しない、より一般的で移植性の高い実装を見つけようとしています。

私は次のようなものを作ろうとしています

  1. dma_map_single()
  2. 読み取り/書き込みトランザクションを開始する
  3. トランザクションが終了したことを中断する、ハンドラーを使用する、または wait_event_freezable_timeout
  4. dma_unmap_single()

マップしたメモリに読み書きするだけですか? コールバック ハンドラを登録するにはどうすればよいですか?

編集: もう少し詳しく説明すると、私は ARM プラットフォームで作業しています。

4

1 に答える 1

1

ザイリンクスの例が役立つかもしれません: http://www.wiki.xilinx.com/Zynq+Linux+pl330+DMA

また、Samsung のドライバー (既に Linux カーネルに含まれています): http://lxr.free-electrons.com/source/drivers/dma/pl330.c

于 2014-02-25T10:26:31.063 に答える