Linux Device Driver LDD3、DMA-API.txt、DMA-HOWTO.txt を読み、drivers/dma/dmatest.c も調べましたが、dma 転送を開始する方法がわかりませんでした。メモリのマッピングについてはすべて議論されていますが、トランザクションを開始する方法については議論されていません。PCI サンプル ドライバーには転送機能がありますが、「特定の」DMA 操作を使用しており、ハードウェアに依存しない、より一般的で移植性の高い実装を見つけようとしています。
私は次のようなものを作ろうとしています
- dma_map_single()
- 読み取り/書き込みトランザクションを開始する
- トランザクションが終了したことを中断する、ハンドラーを使用する、または wait_event_freezable_timeout
- dma_unmap_single()
マップしたメモリに読み書きするだけですか? コールバック ハンドラを登録するにはどうすればよいですか?
編集: もう少し詳しく説明すると、私は ARM プラットフォームで作業しています。