問題タブ [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.
linux-kernel - X86プラットフォームでは、DMA操作はMMIOアドレススペースとシステムメモリアドレススペースの間でデータを移動することを意味しますか?
最新のX86/X86_64プラットフォームでは、MMIOメカニズムにより、DMA操作はMMIOアドレス空間とメモリアドレス空間の間でデータを移動しますか?dma_addr_t
Linuxカーネルには、定義があることがわかります。このタイプはMMIOアドレスに使用されますか?
x86 - DMA コントローラで RAM メモリにアクセスする方法は?
フラッシュメモリからRAMにデータをコピーしたい。それで、DMAコントローラーでRAMの宛先メモリアドレスを設定して、そのチャネルを使用してソースアドレス(フラッシュメモリ内)からRAMメモリにデータをコピーできるようにするにはどうすればよいですか。
私は x86 arch でそれをやっていて、それは 8237 DMA です。
linux-kernel - Linux で DMA にアクセスする方法
を実装する必要があるデバイス ドライバーを Linux で作成していますDMA
。
DMA
への呼び出しによってバッファを割り当てることができることは明らかですpci_alloc_consistent()
。しかし、ユーザーレベルからこれらのバッファにコマンドを書き込むにはどうすればよいでしょうか?
タスクには特定のレジスタへの値の書き込みが含まれますが、これらはDMA
コマンドを使用してどのように実装されますか?
linux - PCIE Linux カーネル ドライバーでのストリーミング DMA
Linuxカーネル用のFPGAドライバーに取り組んでいます。コードは x86 では問題なく動作するようですが、x86_64 ではいくつか問題があります。ストリーミング DMA を実装しました。だからそれは次のようになります
しかし、pci_map_sg
返された のようなアドレスは0xbd285800
によって整列されていPAGE_SIZE
ないため、最初のページ全体を送信できません。PCIE 仕様によると
「要求は、メモリ空間アクセスが 4 KB 境界を越える原因となるアドレス/長さの組み合わせを指定してはなりません。」
アラインされたアドレスを取得する方法はありますか、それとも重要なことを見逃しただけですか?
c - DMA ありまたは DMA なしで ARM9 s3c2440 のメモリにデータ フォーム io を転送する方法
IO からメモリに 8 ビットのパラレル データを転送したい。データは約 5 Mhz の速度で非常に高速に転送されます。どこから始めればよいか教えてください。データは ADC からのビデオ信号です。DMA を使用してこれを行うことができるとインターネットで読みましたが、開始が必要です ...
linux - Linux で 4 ~ 8 MB のアライメントされた DMA を割り当てる方法
私は Fedora 14 を使用しており、PCI スイッチ用のドライバーを構築しています。そのスイッチには、8MB の DMA メモリを割り当てる必要があります (2*4MB を処理できます) が、メモリ サイズに合わせる必要があります。たとえば、8MB の場合、ベース アドレスの最初の 23 ビットは 0 にする必要があります。
それ、どうやったら出来るの?
network-programming - マルチスレッドアプリケーションでのダイレクトメモリアクセス(DMA)スケジューリング
DMAを使用してネットワークI/O(インターネットを介した集中的なディスク読み取りと出力)を高速化したいと思います。各スレッドがDMA転送を発行するマルチスレッドアプリケーションがあるのだろうか?ディスクI / OとDMA転送はOSによってどのようにスケジュールされますか?
私が理解している限り、カーネルはユーザープログラムなしでディスクからRAMにデータの必要な部分をロードし、DMA転送を発行します。したがって、ディスクスケジューラはあまり役に立ちません(単一のカーネルプロセスのみが常にディスクにアクセスします)。また、メモリにロードされたデータに対してDMA転送をスケジュールするカーネル内機能があることを期待できますか?
linux - ユーザーメモリへの同時DMA
このことを考慮
ユーザープログラムのスレッド1:
ユーザープログラムのスレッド2:
ドライバーの読み取り:
7ページは両方の転送で使用されることに注意してください。これは大きな問題であり、データが不良になることがありました(0xeeは1つのbufの最後にあります)。明確にするために、2つの読み取りは異なるDMAチャネルで実行されるため、同時に実行できます。
私の解決策は、2つのドライバーDMAが同じページの一部を共有しないように、ユーザープログラムのバッファーをページアラインすることでした。
これに対する別の解決策があるのだろうか?また、なぜこれが大きな問題だったのか疑問に思います。
caching - DMAとキャッシュの違い
DMAとキャッシュを知っているほとんどの人にとっておそらくばかげた質問です...キャッシュはメモリをアクセスできる場所に近い場所に格納するので、I/Oにそれほど多くの時間を費やす必要はありません。
しかし、DMAはどうですか?それはあなたがより少ない遅延でそのメインメモリにアクセスすることを可能にしますか?
誰かが違い、両方、またはなぜ私が混乱しているのかを説明できますか?
c - mmap() がシーケンシャル IO よりも速いのはなぜですか?
重複の可能性:
mmap() と読み取りブロック
mmap()
シーケンシャルIOよりも速いと聞きました(インターネットのどこかで読んだ) 。これは正しいです?はいの場合、なぜ速いのですか?
mmap()
シーケンシャルに読み取っていません。mmap()
と同じようにディスク自体から取得するread()
必要があります- マップされた領域はシーケンシャルではないため、DMA はありません (?)。
それで、実際にはファイルからmmap()
よりも遅くなるはずですか?read()
上記の私の仮定のどれが間違っていますか?