Linuxカーネルモジュールのアンロードを停止する

ジーガーパテル:

プラットフォームドライバーに基づく1つのLinuxカーネルモジュールがあります。そこにメソッド
を実装probe()remove()ました。

struct platform_driver {
    int (*probe)(struct platform_device *);
    int (*remove)(struct platform_device *);
}

これで、ユーザーが実行するとrmmod <myModule>remove()メソッドが呼び出されます。ここで私はいくつかの条件チェックを実行し、ユーザーがrmmodここで実行しはならないことを知った ここでは、クリーンアップを実行して、このrmmodを失敗させたくありません。

私は戻ってきた、-1またはそれを試み-EBUSYましたremove()が、それでもrmmod <myModule>アンロードされ、lsmodの出力には表示されません

remove()メソッドでのモジュールのアンロードを停止する方法はありますか?

Tsyvarev:

すでに(または他の手段によって)開始されたモジュールのアンロードをキャンセル(または停止することはできませんrmmodしかし、それを呼び出すことでモジュールのアンロード防ぐことが可能ですtry_module_get

// Before your module enters into the state, when its unloading is not desirable.

// Prevent unloading of the module
if(!try_module_get(THIS_MODULE)) {
  <failed to prevent module unloading>
}

<....> // This code will be protected from the module's unloading

// Allow the module to be unloaded again
module_put(THIS_MODULE);

への(成功した)呼び出しtry_module_getが有効な間、rmmodモジュールのコードを実行せずに、モジュールのアンロードを即座に拒否します。

関数try_module_getからのmodule_init呼び出しが成功するかどうかはわかりませんが、関数からmodule_exit呼び出すと間違いなく失敗します。しかし、他のすべての場所では、この呼び出しは成功するはずです。

module_put呼び出しについては、呼び出すのと同じ関数から実行する必要はありませんtry_module_getまったく呼び出さなくてもかまいmodule_putませんが、可能であればこれは避けてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Linuxカーネルでのモジュール(アン)ロード手順

分類Dev

使用中のカーネルモジュールをアンロードする方法は?

分類Dev

ロード可能なカーネルモジュールのカーネルアドレスを見つける

分類Dev

Linux:カーネルモジュールの再ロード

分類Dev

カーネルモジュール 'nvidia-drm'をアンロードする方法は?

分類Dev

カーネルモジュールをロードするときの不明なシンボル

分類Dev

CコードからLinuxカーネルモジュールをロードする方法

分類Dev

カーネルモジュールをクロスコンパイルするためのエイリアス

分類Dev

Linuxカーネルモジュールをインストールする

分類Dev

BUG()呼び出し後にLinuxカーネルモジュールをアンロードできません

分類Dev

Gentoo Linuxでカーネルモジュールを自動ロードする方法

分類Dev

Linuxカーネルモジュールの作成時にユーザープロセスpidを取得する

分類Dev

Linuxカーネルのモジュールで機能をオーバーライドする

分類Dev

Linuxカーネルのモジュールで機能をオーバーライドする

分類Dev

RPMを使用してLinuxカーネルのバージョンに依存しないカスタムLinuxカーネルモジュールをロードする方法

分類Dev

別のアーキテクチャ用にLinuxカーネルモジュールを再構築する

分類Dev

Linuxでカーネルモジュールの署名を無効にする方法

分類Dev

Linuxカーネルモジュールのバグを特定する

分類Dev

Linuxカーネルモジュールのコマンドライン引数として配列を渡す

分類Dev

Linuxイメージカーネルのインストール後にカーネルモジュールを再構築する方法は?

分類Dev

カーネルモジュールを構築する際のインクルードパスの設定

分類Dev

Pythonでモジュールをアンロードする

分類Dev

カーネルモジュールをlxcコンテナにロードする方法は?

分類Dev

Linuxカーネルモジュールのクロスコンパイル

分類Dev

カーネルモジュールのロードを自動的に制御する

分類Dev

カーネルモジュールのプロセス数を出力する

分類Dev

カーネル間モジュールの依存関係を確認するためにコードにチェックを入れる方法-Linuxカーネル?

分類Dev

カーネルの更新後にvirtualboxのカーネルモジュールを再ロードする必要があるのはなぜですか?

分類Dev

カーネルの更新後にvirtualboxのカーネルモジュールを再ロードする必要があるのはなぜですか?

Related 関連記事

  1. 1

    Linuxカーネルでのモジュール(アン)ロード手順

  2. 2

    使用中のカーネルモジュールをアンロードする方法は?

  3. 3

    ロード可能なカーネルモジュールのカーネルアドレスを見つける

  4. 4

    Linux:カーネルモジュールの再ロード

  5. 5

    カーネルモジュール 'nvidia-drm'をアンロードする方法は?

  6. 6

    カーネルモジュールをロードするときの不明なシンボル

  7. 7

    CコードからLinuxカーネルモジュールをロードする方法

  8. 8

    カーネルモジュールをクロスコンパイルするためのエイリアス

  9. 9

    Linuxカーネルモジュールをインストールする

  10. 10

    BUG()呼び出し後にLinuxカーネルモジュールをアンロードできません

  11. 11

    Gentoo Linuxでカーネルモジュールを自動ロードする方法

  12. 12

    Linuxカーネルモジュールの作成時にユーザープロセスpidを取得する

  13. 13

    Linuxカーネルのモジュールで機能をオーバーライドする

  14. 14

    Linuxカーネルのモジュールで機能をオーバーライドする

  15. 15

    RPMを使用してLinuxカーネルのバージョンに依存しないカスタムLinuxカーネルモジュールをロードする方法

  16. 16

    別のアーキテクチャ用にLinuxカーネルモジュールを再構築する

  17. 17

    Linuxでカーネルモジュールの署名を無効にする方法

  18. 18

    Linuxカーネルモジュールのバグを特定する

  19. 19

    Linuxカーネルモジュールのコマンドライン引数として配列を渡す

  20. 20

    Linuxイメージカーネルのインストール後にカーネルモジュールを再構築する方法は?

  21. 21

    カーネルモジュールを構築する際のインクルードパスの設定

  22. 22

    Pythonでモジュールをアンロードする

  23. 23

    カーネルモジュールをlxcコンテナにロードする方法は?

  24. 24

    Linuxカーネルモジュールのクロスコンパイル

  25. 25

    カーネルモジュールのロードを自動的に制御する

  26. 26

    カーネルモジュールのプロセス数を出力する

  27. 27

    カーネル間モジュールの依存関係を確認するためにコードにチェックを入れる方法-Linuxカーネル?

  28. 28

    カーネルの更新後にvirtualboxのカーネルモジュールを再ロードする必要があるのはなぜですか?

  29. 29

    カーネルの更新後にvirtualboxのカーネルモジュールを再ロードする必要があるのはなぜですか?

ホットタグ

アーカイブ