使用busybox制作的文件系统,内核启动后,就会开始执行busybox init进程,这个和一般的sys v init一样。
busybox要完成以下工作:
①为init进程设置信号处理进程
②对控制台进行初始化
③解析inittab文件,即/etc/inittab
④在默认情况下会运行系统初始化脚本,/etc/init.d/rcS
⑤运行导致init暂停的inittab命令(动作类型wait)
⑥运行仅执行一次的inittab命令(动作类型once)
在busybox源码目录下的/example/inittab文件中可以看到inittab的格式:
Format for each entry: <id>:<runlevels>:<action>:<process>
但是busybox不支持runlevels,所以该域会被忽略掉
<id>运行程序的控制台
<runlevels>运行级别,被忽略了
<action>动作类型
<process>程序名
其中动作类型包括:sysinit, respawn, askfirst, wait, once,restart, ctrlaltdel, shutdown,其作用如下:
sysinit:指定系统初始化脚本
respawn:在对应进程结束后马上启动此程序
askfirst:类似于respawn,但会在终端上显示”Please Enter to active this console”,用户回车后程序启动。
wait:指示init进程在执行完此命令行对应程序后才能再处理其他动作。
once:只执行一次,且不会等待完成
restart:init进程重新启动的时候执行的进程,实际上就是init本身。
ctrlaltdel:按下三个组合键后执行的程序
shutdown:关机时执行的程序
如果busybox没有找到inittab,那么它会使用默认配置,配置如下:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
默认的终端是/dev/console,如果/dev/console不是实际终端,那么它就会去尝试tty2,tty3等。
::askfirst:-/bin/sh,加上一个”-“,不知道有什么用。