初期化機能がないとカーネルモジュールがロードされますか?

初期化機能がないとカーネルモジュールがロードされますか?

初めてドライバコードを書いてみました。カーネルモジュールの初期化関数は、init_module() または module_init() マクロを使用して、指定された他の関数であると指定した多くのリソースを特定しました。この初期化関数は、カーネルモジュールがロードされると呼び出されます。

ただし、ロード可能なカーネルモジュールに初期化関数が存在せずにロードしようとすると、何が起こるかについての情報が見つかりません。

カーネルモジュールがツリー内にあり、初期化機能がない場合はどうなりますか?

- -あらかじめありがとうございます。

ベストアンサー1

モジュールには初期化機能は必要ありません。do_init_moduleその不在を扱う:

        /* Start the module */
        if (mod->init != NULL)
                ret = do_one_initcall(mod->init);

これらのモジュールは、シャットダウン機能なしでアンロードできます(初期化機能を持つモジュールとは異なり、シャットダウン機能がない場合は永続的です)。

モジュールが組み込まれると、初期化関数は__initcallリンク時間認識関数になります。モジュールがなくても問題は発生しません。

おすすめ記事