2

私はカーネルプログラミングに不慣れで、現在tplinkワイヤレスNIC(Atherosチップセット)用の「Madwifi」ドライバーを使用しています。私のカーネルバージョンは2.6.32-37(ubuntu)です。

私は他の人(私は知らないので、詳細情報を入手するために連絡することができません)によって変更されたドライバーを使用しています、そして私は彼らが動的にメモリを割り当てたのではないかと心配しています(kmallocを使用して)がそれを解放しませんでした適切に。

私の質問は次のとおりです。

  1. 割り当てられたメモリを実際に解放しなかった場合、オペレーティングシステムはモジュールを「ビジー」と見なし、モジュールをアンロードできなくなりますか?

  2. そして、どのように、またはどこでモジュールに割り当てられたメモリを解放する必要がありますか(モジュールが「永久に」実行されることになっているという事実を考慮して)?

ありがとう!

オマー。

4

1 に答える 1

1

kmallocいいえ。 (またはその同僚のいずれかで)メモリを割り当ててuse-countも、モジュールのはインクリメントされません。割り当てられたメモリの所有権は、アドレス(ポインタ変数に保持されている)をどこかに格納されている別のモジュール/ブロックに渡すだけでいつでも変更できます。カーネルはこれを追跡していません。

メモリがどのように共有され、与えられ、取得されるかは、コーディングアーキテクチャとコーディングモデルの選択に大きく依存します。これはCで書かれています。そのためのルールはありません。

モジュールの使用回数を処理する1つの方法は、krefを使用することです。詳細については、kernel-source-treeまたはここのDocumentation/kref.txtを参照してください。

于 2013-03-03T10:03:29.547 に答える