0

私はLinuxデバイスドライバープログラミングにかなり慣れていませんが、デバッグの目的で、データのストリームをファイルに直接書き込みたいと思います。または多分私は別の方法で質問をする必要があります:

1つのモジュールがデータストリームを提供するシステムオンチップがあります。モジュールは書き込みアドレスで初期化する必要があります。データをメモリに書き込む代わりに、データストリームをそのアドレスのファイルにリダイレクトしたいと思います。カーネルスペースでファイルに書き込むことは推奨されないため、これはユーザースペースを介して行うこともできます。

誰かがこれを行う方法を大まかにスケッチできますか?

ありがとう、ステファン

4

1 に答える 1

0

あなたの質問から、これはメモリバッファに直接書き込むハードウェアモジュールだと思います。ファイルへの途中で常に中間メモリバッファが必要になりますが、デバイスドライバでこれを管理する方法はいくつかあります。

最も単純なケースは、読み取り操作を介してデータをユーザースペースに返す文字デバイスドライバーを実装することです。ファイルに書き込むユーザースペースアプリケーションは、と同じくらい単純にすることができますcat。モジュールはドライバーによって割り当てられたメモリバッファーに書き込み、readメソッドはこのバッファーからユーザースペースバッファーにデータをコピーします。これについてはDMA-Mapping.txt、カーネルのドキュメントとLinuxデバイスドライバー(LDD)で説明されています。

データレートが高い場合(デバイスのパフォーマンスに関連して高い場合)、read要求のページをメモリにロックし、モジュールがそれらのページに直接書き込む、より高度な読み取り操作を検討する必要があります。 。これはより複雑であり、この領域に関するLDDのドキュメントはかなり古いものです。これを理解するために、カーネル内のビデオキャプチャドライバーのソースを調べることをお勧めします。

ドライバーが実行する通信の種類が多い場合は、Netlinkを使用することをお勧めします。

于 2010-03-11T10:28:22.637 に答える