初めてドライバコードを書いてみました。カーネルモジュールの初期化関数は、init_module() または module_init() マクロを使用して、指定された他の関数であると指定した多くのリソースを特定しました。この初期化関数は、カーネルモジュールがロードされると呼び出されます。
ただし、ロード可能なカーネルモジュールに初期化関数が存在せずにロードしようとすると、何が起こるかについての情報が見つかりません。
カーネルモジュールがツリー内にあり、初期化機能がない場合はどうなりますか?
- -あらかじめありがとうございます。
ベストアンサー1
モジュールには初期化機能は必要ありません。do_init_module
その不在を扱う:
/* Start the module */
if (mod->init != NULL)
ret = do_one_initcall(mod->init);
これらのモジュールは、シャットダウン機能なしでアンロードできます(初期化機能を持つモジュールとは異なり、シャットダウン機能がない場合は永続的です)。
モジュールが組み込まれると、初期化関数は__initcall
リンク時間認識関数になります。モジュールがなくても問題は発生しません。