busybox的init初始化进程

来源:互联网 发布:mybatis的sql语句中if 编辑:程序博客网 时间:2024/06/10 13:08

转自: http://www.itqun.net/content-detail/237959.html


busybox的init

   除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在LINUX的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(参考> p201)
1.       为init设置信号处理过程
2.       初始化控制台
3.       剖析/etc/inittab文件
4.       执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.       执行所有导致init暂停的inittab命令(动作类型:wait)
6.       执行所有仅执行一次的inittab(动作类型:once)
一旦完成以上工作,init进程便会循环执行以下进程:
       1.  执行所有终止时必须重新启动的inittab命令(动作类型:once)
       2.  执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)
       初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。
       inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)      
       id:runlevel:action:process
尽管此格式与传统的Sytem V init类似,但是,id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem V init保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。
动作
结果
sysinit
为init提供初始化命令行的路径
respawn
每当相应的进程终止执行便会重新启动
askfirst
类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键
wait
告诉init必须等到相应的进程完成之后才能继续执行
once
仅执行相应的进程一次,而且不会等待它完成
ctratldel
当按下Ctrl+Alt+Delete组合键时,执行相应的进程
shutdown
当系统关机时,执行相应的进程
restart
当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身

以下是我的usblinux的inittab文件
::sysinit:/etc/init.d/rcS
::respawn:/sbin/get