モジュールの複数のインスタンス

モジュールの複数のインスタンス

プロセスcat /proc/modulesの詳細を説明しました。以下のモジュールは、4つのインスタンスがあることを示しています。

poe_isr 3046 4 - Live 0xc37e1000 (O)

どういう意味ですか?これらのインスタンスの使用量を表示するにはどうすればよいですか?モジュールにインスタンスがゼロで表示され、アクティブな場合はどういう意味ですか?モジュールがロードされていませんが、まだ有効ですか?

adcmods 1565 0 - Live 0xc37dd000 (P)

答え1

カウンターです。カーネル API を使用して増減できます。

いつ増やすかはモジュールの責任です。たとえば、somefsカーネルにモジュールがある場合、待機動作は、パーティションがマウントされたときにこのカウンタをインクリメントし、アンマウント時somefsに減少させることです。これにより、somefsパーティションがマウントされていても削除されませんsomefs

モジュール使用カウンタがゼロでない場合、rmmodモジュールは失敗します。ただし、rmmod -f強制モジュールの削除がカーネルにコンパイルされる場合はそうではありません。

したがって、重要な点は次のとおりです。

  • カウンターを増減するのはモジュールの責任です。その後、複雑な一般的な参照トレースはありません。
  • ほとんどの場合、正常に動作しますが、必ずしもそうではありません。たとえば、ipv6このように動作するいくつかのダーティモジュールはカウンタを1に増やし、insmod決して減少しません。したがって、ipv6モジュールにコンパイルすると、決してrmmodこれを行うことはできません。一部のグラフィックカードドライバは、初期化を解除するルーチンがないため、同様の方法で動作します。開発者が誇りに思うモジュールはありません。
  • その結果、モジュールを取り外すことができない場合、モジュールが正確に何を使用しているのかを判断する一般的な方法はありません。

答え2

poe_isr 3046 4 - Live 0xc37e1000 (O)

3番目の列は、4つの依存モジュール/プロセスがあることを示します。だからrmmod動作しません。 4番目の列は、これがモジュールか非モジュールかを示します。 '-'は4つの例といいえモジュールを意味します。上記の例では、poe_isrは4つの非モジュールに依存しています。

関連情報