問題タブ [dma]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - AsynchronousFileChannel の transferTo に相当するものはありますか?
私はJava 7でNIO2をいじっていましたが、同期兄弟のようなメソッドAsynchronousFileChannel
があると思いました。transferTo
FileChannel
ローカル ファイルと開いている TCP ソケットの間でゼロコピー転送を実行しようとしています。私は単純に a を作成し、 myを最後の引数としてFileChannel
呼び出しようとしましたが、非同期ソケットのバージョンが a ではないため、Java にはそれがありません。transferTo
AsynchronousSocketChannel
WritableByteChannel
AsynchronousSocketChannel
それがオプションとして除外された場合、バイトをレバレッジDMAにパイプできるようにする回避策または外部ライブラリを知っている人はいますか?
device - DMAを使用してLinuxデバイスドライバーからハードドライブに書き込む方法
アプリケーションからデバイス ドライバーにデータのチャンクを転送できますが、DMA を使用してデバイス ドライバーから実際のハード ドライブにインターフェイスを書き込むことができません。これに関するサンプルコードまたはポインタはありますか? よろしくお願いいたします。
embedded - Cortex M3 の DMA チャネルがアイドル状態になったことを検出できますか?
STM32 Cortex M3 マイクロコントローラ用の C コードを開発するプロジェクトを引き継いだところです。
私がすぐに抱えている問題は、2 つの USART 間でデータを転送するフリー ランニング DMA チャネルがあることですが、別のソースからのデータを目的の USART に送信する必要がある場合があります。
DMA がデータ転送でビジーかアイドル状態かを検出する方法はありますか、または転送が完了したときにトリガーされる割り込みはありますか。
ご回答ありがとうございます。
デイブ
opencl - DMA用のGPUメモリの物理アドレスを取得するにはどうすればよいですか?(OpenCL)
OpenCLプログラムを作成していますが、DMAを使用してフレームグラバーからGPUにデータを転送したいと考えています。GPUでOpenCLバッファーの物理アドレスを取得するにはどうすればよいですか?
linux - コンピューターのネットワーク スタックは DMA を使用しますか?
ハードディスクのデータは DMA を使用してメイン メモリに転送されますが、ネットワーク スタックのデータは DMA を使用できず、データはプロセッサを経由する必要があることを知りました。本当ですか?はいの場合、これを回避する方法は何ですか? プロセッサを介してデータを転送するのは本当に効率が悪いのではないですか?
c - カーネルからユーザースペース(DMA)へ
最近、私はたくさんのWebサイトを読んでいて、10gb / s NIC、それらのDMA、およびLinuxカーネル(10/100 mb / s NIC)によるデータの処理方法に関する本を読んでいます。いくつかの質問が思い浮かびました。
NICからユーザーランドに10GB/秒のデータフローを送信する最も簡単な方法は何でしょうか(ユーザーランドのデータを同じ速度で処理できると思います)。
と
ユーザースペース内にDMAバッファーを実装して、そこから生データを直接読み取る(そして明らかに同じレートで処理する)のは良い考えだと思いますか?
または私が考えていなかった彼らのより良い解決策です:/
ありがとうございました。
linux-kernel - mmap()を実装するカーネルドライバーはキャラクターデバイスを作成する必要がありますか?
物理的に隣接したDMA可能なメモリのいくつかのメモリブロックを管理するカーネルドライバを作成しようとしています(kmalloc()
これらはDMAストリームのみであるため使用しています)。一部の機能をユーザースペースに取り込むには、このメモリをmmap()
独自の実装で編集しmmap()
ます。私はLinuxデバイスドライバーと、私の主な情報源としてGoogleに表示される悪い例を使用しています。
私mmap()
(今のところそれを呼んでmy_mmap()
います)はカーネルに登録する必要があります。を使用してこれを行う唯一の有効な方法のようですstruct file_operations
が、これにはキャラクターデバイスとその物理的な場所を作成する必要があります。私はそれをしたくありません。ユーザースペースアプリケーションがメモリバッファにアクセスするための仮想アドレスを作成したいだけで、メモリバッファをマップするファイルを作成したくありません。これは可能ですか?
フレームバッファも実装と同等の構造を持っていることがわかりましたmmap()
が、それはあまりにも多くのハックになります。それとそれはより多くの未知数を追加します。
私が理解しているように、私が失われた柔軟性にmy_mmap()
問題がない限り、重い物を持ち上げて使用することができます。remap_pfn_range()
それ以外の場合は、ローカルを実装し、nopages()
を使用して登録する必要がありstruct vm_operations_struct
ます。これは正しいです?
linux - FPGA が CPU RAM に直接 DMA できるようにする Linux デバイス ドライバー
FPGA(現在はPCIエクスプレス経由でPCに接続されている)がDMAデータをCPU RAMに直接転送できるようにするLinuxデバイスドライバーを作成しています。これは対話なしで実行する必要があり、ユーザー スペースはデータにアクセスできる必要があります。詳細: - 64 ビット Fedora 14 を実行中 - システムに 8GB の RAM がある - FPGA (Cyclone IV) が PCIe カード上にある
これを達成するために、私は次のことを実行しました。RAM の上位 2GB が /proc/meminfo で予約されていることがわかります - FPGA レジスタへの読み書きを可能にするために BAR0 をマップしました (これは完全に機能します) - remap_pfn_range() を使用してドライバーに mmap 関数を実装しました - ioremap を使用してバッファーの仮想アドレス - バッファーにデータを書き込むための ioctl 呼び出し (テスト用) を追加しました - データをバッファーに書き込む ioctl 呼び出しを作成して mmap をテストし、データがユーザー空間からバッファーにあることを確認しました
私が直面している問題は、FPGA が私が提供したバッファ アドレスにデータを DMA し始めるときです。(DMAR から:) PTE エラーが常に発生するか、以下のコードで次のエラーが発生します: DMAR: [DMA Write] Request device [01:00.0] fault addr 186dc5000
DMAR: [fault reason 01] Present bit in root entry is DRHD のクリア: エラー ステータス reg 3 の処理
最初の行のアドレスは、FPGA からの DMA に基づいて毎回 0x1000 ずつインクリメントします。
ここに私の init() コードがあります:
}
これが私のmmapコードです:
ご協力いただきありがとうございます。
x86 - x86のサービスデバイスメモリコピーへのページフォールトの割り込み処理
x86 CPUでの割り込み、特にページフォールトの制御フローを解決しようとしています。これまでに私が理解できることは次のとおりです。
- IDTにはサービスルーチンアドレスが入力されます。
- 割り込みが発生します。
- CPUは、EFLAGS、CS、およびEIPをスタックに保存します。
- EIPは、IDTからフェッチされたISRアドレスに設定されます。
mov eip, [idtr+interruptNum*4]
- 割り込みルーチンが実行されます。
- 割り込みルーチンは
iret
命令で完了します。
ここで、割り込みが実際にはNICバッファに関連するページフォールトであるとしましょう。ISRはout
、DMAコントローラーにシステムメモリからデバイスに(またはその逆に)コピーを発行するように指示するために使用しますか、それともここでベースから離れていますか?
linux-kernel - dma_alloc_coherent に関するいくつかの質問
この呼び出しから返された DMA アドレスは物理アドレスと同じですか? LDD3 は、ドライバが DMA アドレスを不透明として扱う必要があることを示しています。ユーザー空間が直接読み書きできるように、この DMA バッファーを mmap したいと考えています。質問は、remap_pfn_range にどの PFN を指定する必要があるかです (これは、I/O メモリと同じようにコンベンショナル メモリでも機能するようになりました (カーネル 3.4 以降))。DMA アドレスを unsigned long にキャストして、それを PFN に変換することはできますか? これはLDD3が不透明性について言ったことに違反していませんか?
dma_alloc_coherent
常に__get_free_pages
内部で使用しますか? これは、領域が常に過剰に割り当てられる可能性があることを意味しますか (最初の関数はバイトを使用しますが、2 番目の関数はページ単位で割り当てるため)?への呼び出しから取得された複数の連続したページに対して単一のストリーミング マッピングをセットアップする方法はあります
__get_free_pages
か?dma_map_page
単一ページのみに適用されます。