最終更新:2015-10-26 (月) 17:30:44 (3076d)
do_initcalls
Top / do_initcalls
カーネルソース中の随所に散らばる初期化関数を全て実行する
メモ
- 初期化関数は全て __init_call? マクロと共に宣言され、ELFセクション「.initcall.init? 」に関数のポインタが格納されることにより、カーネルパラメータのパース関数と同じ要領で実行が行われる。
- http://www.ctrlz.jp/techdoc/linuxboot/61-startcommon.html
呼び出し元
実装
static void __init do_initcalls(void) { int level; for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++) do_initcall_level(level); }
do_initcall_level?
static void __init do_initcall_level(int level) { extern const struct kernel_param __start___param[], __stop___param[]; initcall_t *fn; strcpy(static_command_line, saved_command_line); parse_args(initcall_level_names[level], static_command_line, __start___param, __stop___param - __start___param, level, level, &repair_env_string); for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++) do_one_initcall(*fn); }
- do_one_initcall