2012-04-19 5 views
4

で無限ループを実行しています。現在、私がrmmodを実行すると、モジュールがまだビジー状態になっていることに気付き、しばらくしてカーネルパニックが起こったことに気付きます。は、私は私がモジュールをアンロードしていないまで無限ループを実行したいと考えているモジュールを作成してもらって、Linuxカーネルモジュール

while(1) 
{ 
    ....... 

} 

私はモジュールをアンロードするまで無限ループを実行できるトリックはありますか?

+1

これは良い考えではありません。あなたは何を達成しようとしていますか? – stsquad

+0

代わりにタイマーインターフェイスを使用することを検討してください。 http://kerneldeveloper.drupalgardens.com/addtimer-function –

答えて

6

いる状況では、このループは動作しますか?これは非常に重要な質問です。

init_moduleを実行すると、insmodプロセスは決して終了しません。これはかなり悪いことです。
一部のシステムコールがそれを実行すると、システムコールは返されず、悪いこともあります。どちらの場合も
は、プロセス(いなくてもkill -9を)殺すために方法はありません。あなたがのsoftirqハンドラ(または、より悪い、hardIRQハンドラ)でそれをやっている場合は
は、システムがハングアップするでしょう。あなたは、このタスクに専用されているカーネルスレッドでそれを行う場合

、あなたは右のそれを得るチャンスを持っています。
しかし、CPUを完全に稼働させたくない場合は、スケジューラを呼び出して他のタスクを実行させる必要があります。 msleep_interruptibleはそれを行う良い方法です。

+0

コードの例を教えてください...... – karan421

+0

準備が整った例があります。私はあなたにそれを残すでしょう。 – ugoren

2

)(私はこれがうまくいくわからないんだけど、(notStopped)しながら、しばらくのintstead(1)を使用し、最初の1に設定され、かつstop_moduleにゼロに設定します。

+0

モジュールをアンロードするのに1秒以内にシステムがハングアップする..... – karan421

関連する問題

 関連する問題