zoukankan      html  css  js  c++  java
  • 【系统移植】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





  • 相关阅读:
    Typora上传图片设置
    SpringBoot入门详细教程
    vue
    我才学习到的严格模式(越往后看,越感觉复杂啊)
    js中三种定义变量的方式const, var, let的区别。
    冒泡
    tab切换
    日历
    jquery实现拖拽进度条并显示百分比的特效
    抽奖代码
  • 原文地址:https://www.cnblogs.com/lcw/p/3802650.html
Copyright © 2011-2022 走看看