モジュールをアンロードしなくなるまで無限ループを実行したいモジュールを作成しました。現在、rmmodを実行すると、モジュールがまだビジーで、しばらくするとカーネルパニックが発生することがわかります。
while(1)
{
.......
}
モジュールをアンロードするまで無限ループを実行できるトリックはありますか?
モジュールをアンロードしなくなるまで無限ループを実行したいモジュールを作成しました。現在、rmmodを実行すると、モジュールがまだビジーで、しばらくするとカーネルパニックが発生することがわかります。
while(1)
{
.......
}
モジュールをアンロードするまで無限ループを実行できるトリックはありますか?
このループはどのコンテキストで実行されますか? これは非常に重要な質問です。
実行init_module
すると、insmod
プロセスが終了することはありません。これは非常に悪いことです。
何らかのシステムコールがそれを実行すると、システムコールは返されず、それも悪いことになります。
どちらの場合も、プロセスを強制終了する方法はありません (でさえもkill -9
)。
これを softIRQ ハンドラー (または、さらに悪い場合は hardIRQ ハンドラー) で実行すると、システムがハングします。
このタスク専用のカーネル スレッドで実行すると、正しく処理できる可能性があります。
ただし、CPU を完全に占有したくない場合は、スケジューラを呼び出して他のタスクを実行させる必要があります。msleep_interruptible
それを行うには良い方法です。
これが機能するかどうかはわかりませんが、の代わりに、最初に設定されているをwhile(1)
使用して、に設定します。while(notStopped)
1
0
stop_module()