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)执行信号处理,一般重启设备。

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4821814.html
Copyright © 2011-2022 走看看