FC2ブログ
メモ帳
メモ帳
スポンサーサイト
--年--月--日 (--) --:-- | 編集
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
init_moduleとcleanup_module
2007年05月12日 (土) 09:48 | 編集
デバイスドライバについて復習してみる。
というわけで、まずはinit_moduleとcleanup_moduleから。
デバイスドライバをカーネルにロードした時に
実行されるのがinit_module。
static int init_module(void)

自分で関数名を指定したければ
static init hoge_init(void)
{
  //ドライバの初期化処理
}
module_init(hoge_init);
としてやればよい。

デバイスドライバをカーネルからアンロードした時に
実行されるのがcleanup_module。
static void cleanup_module(void)

自分で関数名を指定したければ
static void hoge_exit(void){
  //ドライバクリーンアップ処理
}
module_exit(hoge_exit);
としてやればよい。

例)
#include<linux/init.h>
#include<linux/module.h>

static int __init hoge_init(void)
{
  //なんか処理
}
static void __exit hoge_exit(void)
{
  //なんか処理
}
module_init(hoge_init);
module_exit(hoge_exit);

これでモジュールのロード時にhoge_initが
アンロード時にhoge_exitが実行される。
__initはこの関数はモジュールの初期化のときにだけ
使われるよって宣言。
__exitもこの関数はモジュールのクリーンアップ処理の時にだけ
使われるよって宣言。
これらを宣言することによって、初期化が終了した時に__initで
修飾された関数はメモリから削除され、__exitで修飾された
関数はクリーンアップ処理(モジュールの削除、シャットダウン)
の時だけメモリに登録されるので、それ以外で使用する場合は宣言しちゃだめ。
(init_moduleで初期化失敗した時に、cleanup_moduleを呼び出して
初期化処理で確保したりソースを解放する場合なんかは、
__exit宣言しちゃだめよってこと)
初期化処理の時にだけ使うデータ宣言の__initdataとか
クリーンアップ処理の時にだけ使うデータ宣言の__exitdataとかもあるとか。
コメント
この記事へのコメント
コメントを投稿する
URL :
コメント :
パスワード :
秘密 : 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004 Powered By FC2 allrights reserved. / template: sukechan
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。