【系统移植】kernel分析

内核启动流程

【系统移植】kernel分析_第1张图片

第二阶段

starte_kernel :
  |
 rest_init :
   |
  kernel_init
    |
   do_basic_setup(); // 加载驱动
     |
    do_initcalls();
      |
      for (fn = __early_initcall_end; fn < __initcall_end; fn ++)
      do_one_initcall( *fn);
        |
       ret.result = fn(); // 执行所有的驱动入口函数
   prepare_namespace(); // 挂载文件系统
   init_post(); // 启动第一用户进程
     |
     if (execute_command) {
    run_init_process(execute_command);
    printk(KERN_WARNING "Failed to execute %s.  Attempting "
        "defaults...\n", execute_command);
   }
   run_init_process( "/sbin/init");
   run_init_process( "/etc/init");
   run_init_process( "/bin/init");
   run_init_process( "/bin/sh");
   panic( "No init found. 
  kthreadd
  schedule();
 
run_init_process
 |
 kernel_execve(init_filename, argv_init, envp_init); // 执行另一个代码空间
 // /linuxrc==> busybox==>
// 注意点: 最好在bootargs传递init=/linuxrc

 

  @成鹏致远

(blogs:http://lcw.cnblogs.com

(email[email protected]

(qq552158509

 





你可能感兴趣的:(kernel)