/ / initおよびexit関数なしのLinuxカーネルモジュール-linux、linux-kernel、linux-device-driver

linux、linux-kernel、linux-device-driver

initおよびexit機能を備えた基本的なLinuxカーネルモジュールを1つ作成しました。

次に、initなしでLKMをコンパイルしようとしました関数が正常にコンパイルされ、カーネル内に挿入されました。次にrmmodを使用して同じものを削除し、削除してdmesgの出力を取得しました。これをexit関数に入れました。

なしのモジュールについても同じ手順に従いますexit関数およびinit関数付き。正常に挿入されましたが、削除しようとすると「モジュールを削除できませんでした:デバイスまたはリソースがビジーです」というエラーが表示されます。

上記の動作を理解できません。なぜ、init関数のないモジュールが正常に機能するのに、exit関数のないモジュールが正常に機能しないのですか。 誰かが同じことを説明できますか?

ありがとう、

回答:

回答№1の場合は3

カーネル(/ kernel / moduleにチェックがあります。c delete_module syscall)を実行します。module_initfuncが モジュールの場合、アンロードするには厳密にexit funcが必要です。 -EBUSYが返されます。

このチェックは、init関数でリソースの割り当てを行い、exit関数でそれらを解放する必要があると想定しているためです!