【系統移植】kernel分析

內核啓動流程

第二階段

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

 

  @成鵬致遠linux

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

(emailwwwlllll@126.com)post

(qq552158509spa

 



相關文章
相關標籤/搜索