Easonay_Y

验证过才会写出来

导航

inittab文件

Posted on 2019-08-17 13:31  Easonay_Y  阅读(386)  评论(0编辑  收藏  举报

一、inittab文件背景

(1)init进程的作用

   使用uboot下载Linux内核时,环境变量bootargs决定了kernel向根文件系统传递的参数,这些参数包括

      bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0

  •    root:指定了根文件系统在Flash分区中的位置
  •    console:指定了内核启动后首选的控制台.
  •    init:指定了Linux内核启动完毕后调用的第一个、也是唯一的一个用户态进程,即进程号为1的进程.其中,参数"init=linuxrc"非常重要.由于init进程是kernel启动后的第一个、也是唯一的一个用户态进程,用户的许多应用程序,比如Mplayer、Qt、Boa都由该进程来启动,换句话说,init进程是所有进程的发起者.

(2)linuxrc文件的作用

  •    在嵌入式Linux中,init进程的执行程序通常是二选其一.这两个执行程序分别是/sbin/init程序,或者是Busybox生成的linuxrc程序.init进程的作用即这个程序的功能.init进程具体运行哪个程序,则由uboot的环境变量bootargs决定,即init=/linuxrc.通常采用命令行参数"init=xxxx"指定某个程序作为init进程运行.比如,init=linuxrc.可以说,linuxrc程序的作用就是init进程的作用.
  •    linuxrc是一个程序,它的执行流程如下所示.其中,如何解析inittab文件可以由用户设定,其它两个一般都不会修改.
  1.       设置信号处理函数.
  2.       初始化控制台.
  3.       解析inittab文件.

(3)/etc/inittab文件的作用

   从上可知,init进程,或者说linuxrc程序最后会解析inittab文件.inittab,可以理解为init table(初始化表),它只是一个普通文件,但系统会根据/etc/inittab的内容启动相关进程或脚本.

 

二、inittab文件格式

(1)如果存在/etc/inittab文件,Busybox init程序解析它,然后按照它的指示创建各种子进程,否则使用默认的配置创建子进程.

(2)/etc/inittab文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下

          <id> : <runlevels> : <action> : <process>

   <1>id :表示这个子进程要使用的控制台,如果省略,则使用与init进程一样的控制台.

   <2>runlevels:这个字段没有意义,可以省略。在linux有意义.

   <3>action:表示init进程如何控制这个子进程,具体取值见下表.

   <4>process:要执行的程序,它可以是可执行程序,也可以是脚本.如果process字段前有“-”字符,这个程序被称为“交互的”.

  【attention】action取值

      名称             执行条件                                           说明

     sysinit        系统启动后最先执行         指定初始化脚本路径,只执行一次,init进程等待它结束才继续执行其它动作

     wait           系统执行完sysinit进程后   只执行一次,init进程等待它结束才继续执行其它动作

     once           系统执行完wait进程后     只执行一次,init进程不等待它结束

     respawn     启动完once进程后           init进程监测发现子进程退出时,重新启动它,永不结束.如Shell命令解释器

     askfirst       启动完respawn进程后     与respawn类似,不过init进程先输出“Please press Enter to activate this console”,等用户输入回车后才启动子进程

     shutdown    当系统关机时                  即重启、关闭系统时执行的程序

     restart        系统重启时                     init进程重启时执行的程序,通常是init程序本身先重新读取、解析/etc/inittab文件,再执行restart程序

  ctrl+alt+del  按下Ctrl+Alt+Del键时   按Ctrl+Alt+Del组合键时执行的程序

(3)inittab文件例程

   <1>::sysinit:/etc/init.d/rcS

      1.该条目的id省略,表示使用与init进程一样的控制台.

      2.该条目的runlevels在嵌入式Linux中都会省略.

      3.该条目的action是sysinit,表示系统启动后最先执行.

      4.该条目的process是/etc/init.d/rcS,表示系统启动后最先执行脚本/etc/init.d/rcS.

   <2>::respawn:-/bin/login

      1.该条目的id省略,表示使用与init进程一样的控制台.

      2.该条目的runlevels在嵌入式Linux中都会省略.

      3.该条目的action是respawn,表示init进程监测发现子进程退出时,重新启动它,永不结束.

      4.该条目的process是/bin/login,表示init进程监测发现/bin/login子进程退出时,重新启动它,永不结束.