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関数でそれらを解放する必要があると想定しているためです!