• 【系统移植】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... ", 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

    (emailwwwlllll@126.com)

    (qq552158509





  • 相关阅读:
    《软件需求十步走》阅读笔记一
    《探索需求》读书笔记三
    2018.9.26 随笔
    2018.9.09 随笔
    日期随笔,目录
    2018.9.03 随笔
    linux signal函数遇到的问题
    关于子线程执行两次的问题
    本科四年的一点经验
    linux 网络编程 3---(io多路复用,tcp并发)
  • 原文地址:https://www.cnblogs.com/lcw/p/3802650.html
Copyright © 2020-2023  润新知