android Kernel Start

来源:互联网 发布:上海水利公司 知乎 编辑:程序博客网 时间:2024/05/16 12:04
/XXX_project/kernel/init/main.c
asmlinkage void __init start_kernel(void)


{
  rest_init();


}
static noinline void __init_refok rest_init(void)
{
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);


}
static int __init kernel_init(void * unused)
{
  do_basic_setup();


}
static void __init do_basic_setup(void)
{
 do_initcalls();


}


static void __init do_initcalls(void)
{
int level;


for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++)
do_initcall_level(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);//---挂载每一个设备驱动
}


static initcall_t *initcall_levels[] __initdata = {
__initcall0_start,
__initcall1_start,
__initcall2_start,
__initcall3_start,
__initcall4_start,
__initcall5_start,
__initcall6_start,
__initcall7_start,
__initcall_end,
};
原创粉丝点击