カーネルモジュールのメモリアクセス


9

2つの異なるカーネルモジュールがioremap_nocache()の呼び出しから同じメモリ領域にアクセスできますか?

ワイヤレスドライバーと別のモジュールがありますが、ドライバーがまだ動作しているときに、別のモジュールでカードのノイズ値のプロファイルを作成します。したがって、上記の私の質問。

私が探求した1つの方法は、ドライバーからカーネルスレッドを開始することでした。次に、セマフォを実装して、同じアドレススペースへの同時読み取り/書き込みから生じる競合状態を防止しました。子スレッドが同じメモリ領域にアクセスできることを期待しました。

残念ながら、これは期待どおりに機能しませんでした。私はどんな提案にも感謝します。


ノイズ値をプロファイルするためにカーネルモジュールが必要なのはなぜですか?
gertvdijk 2013年

質問のおかげで、ワイヤレスドライバーは非常に複雑で、その周期を変更すると、キャリブレーションによって意図しない結果が生じる可能性があります。これは、自分のニーズに対して長すぎる間隔の調整のみを行うため、これを行う必要があります。デバイスを別のモジュールでプロファイルする方法を正確に知っているので、ドライバーが使用しているメモリの同じ領域にアクセスできるかどうか知りたいだけです。
Radagasp、2013年

2
してください編集以前の試み上のすべての詳細を含めるようにあなたの質問を/近づきます。それがこのサイトの仕組みです。ディスカッションフォーラムではなく、Q&Aサイトですね。
gertvdijk 2013

議論には質問と回答が含まれる場合があり、正しいものと間違ったものがあります-管理者全体のルールの解釈は意味論の領域にあるようです。もちろん、質問を更新しました。
Radagasp、2013

回答:


7

カーネルモジュール間でデータを共有する方が簡単だと思うので、別のカーネルモジュールを実装するつもりだと思います。しかし、おそらくそれは良い選択ではありません。ユーザー空間で「ノイズをプロファイリング」することが可能である場合、ユーザー空間で「プロファイラー」を実装することがより良い解決策だと思います。

このソリューションでは、ユーザー空間プロファイラーがデータを読み取り、いくつかの計算を実行してから、結果を送信します。

このソリューションで問題がなければ、実装は次のようになります。

カーネルモジュールでは、charデバイスを「/ proc」に登録し、「読み取り」および「書き込み」プリミティブを実装するだけです。ユーザー空間では、charデバイスへの読み取りと書き込みを行うプロファイラーを実装するだけです。この実装の詳細と情報はすべてここにあります


私はあなたの答えをかなり得たとは思いません...私が理解しているように、私はまだモジュールを書く必要があるでしょう、そしてこのモジュールは他のioremap_nocache()への呼び出しから同じメモリ領域にアクセスしようとしますモジュールが使用しています。それとも、charデバイスをワイヤレスモジュールに登録すると言っていますか
Radagasp

1
そうですね、ソフトウェアを実装する必要がありますが、モジュールを実装する必要はありません。「/ dev / nameofdevice」から読み取って書き込む、モジュールよりも単純な通常のユーザー空間プログラムを作成する必要があります。'ioremap_nocache()'を使用する必要はありません。'open '、' read '、' write '、' close 'としてsyscallsするだけです。そして、はい、ワイヤレスモジュールは、charlandデバイス「/ dev / nameofdevice」を内部に登録して、データをユーザーランドに公開する必要があります。
vitorafsr 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.