無料Wikiサービス | デモページ | [広告] サイト検索サービス Sx4
Linux Kernel(2.6)の実装に関するメモ書き
最近更新したページ
2008/1/14
2008/1/13
2007/12/9
2007/10/5
2007/9/28
2007/9/27
2007/8/22
2007/8/21
検索

モジュール


モジュールのロード

sys_init_module()


	load_module()
		フォーマット(ELFか?等)をチェック

		module_alloc() - 単なるvmalloc()

		セクションヘッダテーブル内の全エントリに対して以下を実行
			SHF_ALLOCが設定されているセクションを移動

		simplify_symbols()
			シンボルテーブル内の全エントリに対して以下を実行
			st_shndx: SHN_UNDEFならresolve_symbol()

		/* Now do relocations. */
		セクションヘッダテーブルを全てチェック。

		セクションのタイプが
			SHT_REL ならapply_relocate()
			SHT_RELAならapply_relocate_add()

	mod->init() - モジュールの初期化ルーチン呼び出し


resolve_symbol() - シンボルのアドレス解決
	__find_symbol() - シンボルの検索
		カーネル内のシンボルテーブルから検索
			__start___ksymtab
			__start___ksymtab_gpl

		組み込み済のモジュール内のシンボルテーブルから検索
			mod->syms[i]
			mod->gpl_syms[i]


apply_relocate() - 再配置(アドレスの書き換えを行う)

	再配置テーブル内の全エントリに対して以下を実行

		rel[i].r_offsetが指しているアドレスにシンボルテーブル
		から引っ張って来たアドレスを設定する。
		*location += sym->st_value;

		(シンボルのアドレス解決(sym->st_value)の設定は
		simplify_symbols()で行われる。)




最終更新 2006/6/23 22:23:21 - kztomita
(2006/3/27 12:59:43 作成)