zoukankan      html  css  js  c++  java
  • BusyBox init工作流程

    linux启动完成后,运行由Busybox产生的init进程。

    /sbin/init是系统启动的第一个用户进程,pid=1。
    init的工作是根据/etc/inittab脚本来进行系统的初始化工作,关机前的工作等等。

    init代码在BusyBox中init/init.c中,主要进行以下工作:

    》为init进程设置信号处理进程。

    》对控制台进行初始化。

    》解析inittab文件即/etc/inittab。

    》若无/etc/inittab,采用默认的inittab,运行初始化脚本/etc/init.d/rcS.

    》运行inittab中其他命令。

    ----------------------------------------------------------------------------

    系统默认的inittab:

    #         ::sysinit:/etc/init.d/rcS
    #         ::askfirst:/bin/sh
    #         ::ctrlaltdel:/sbin/reboot
    #         ::shutdown:/sbin/swapoff -a
    #         ::shutdown:/bin/umount -a -r
    #         ::restart:/sbin/init

    #         tty2::askfirst:/bin/sh
    #         tty3::askfirst:/bin/sh
    #         tty4::askfirst:/bin/sh

    不管自己的inittab,还是系统默认inittab,一般首先运行/etc/init.d/rcS脚本,之后再进行后续工作。

    -----------------------------------------------------------------------------

    action解析:

    sysinit:为init提供初始化命令行的路径。

    respawn:在紧跟进程结束后,重启启动该进程(后边的process)。--复位,重启

    askfirst:类似respawn,主要用途是减少系统上执行的终端应用程序的数量,

                   会在控制台上显示“Please press Enter to active this console"的信息,

                   并在系统重启之前等待用户按下”Enter“键。

    wait:通知init必须等到相应的进程执行完之后才能继续执行其他的动作。

    once:进程只执行一次,而且不会等待它完成。

    ctrlaltdel:当按下ctrl-Alt-Del组合键时运行的进程。

    shutdown:当系统关机时运行的进程。

    restart:当init进程重启启动时执行的进程,事实上就是init本身。

    -------------------------------------------------------------------------------

    跟踪init/init.c中init的执行流程,可知其工作流程:

    在init_mian()中完成inittab解析后,组成init_action[],然后顺序阻塞执行:

    SYSINIT -> WAIT -> ONCE ->  循环RESPAWN|ASKFIRST

    命令执行通过run_actions:

    阻塞执行SYSINIT|WAIT|ONCE|CTRLALTDEL|SHUTDOWN -> RESPAWN|ASKFIRST仅执行一次

    中间接受到信号(CTRLALTDEL)执行信号处理,一般重启设备。

  • 相关阅读:
    smobiler介绍(二)
    smobiler介绍(一)
    iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法
    iOS 力学动画生成器UIKit Dynamics 之碰撞效果讲解
    iOS 解决tableView中headerView头部视图不跟随tableView滑动的方法
    iOS 当使用FD_FullscreenPopViewController的时候遇到scrollView右滑手势无法使用的解决
    iOS 点击左上角系统返回按钮方法
    解决右滑返回手势和UIScrollView中的手势冲突
    Git 常见的命令操作
    iOS Class 使用NSProxy和NSObject设计代理类的差异
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4821814.html
Copyright © 2011-2022 走看看