busybox init进程和/etc/inittab关系

嵌入式系统下的 linux 启动过程一般是:
1. 在 bootloader 中制定各种要求传给 linux 内核的参数,制作 ramdisk 或 ramfs 文件系统,并在开机后首先 mount 上,该文件系统主要负责包含启动运行的配置文件,嵌入式系统主要是/etc/inittab 和/etc/rcS 文件;
2. 在 init 进程启动后,进程首先执行/etc/inittab 文件,该文件语法下面介绍,一般包括三项内容就可
以启动。
busybox 的 init 完成系统的初始化工作,关机前的工作等等,我们知道在 Linux 的内核被载入之后,机器就把控制权转交给内核, linux 的内核启动之后,做了一些工作,然后找到根文件系统里面的 init 程序,并执行它, BusyBox 的 init 进程会依次进行以下工作:
1. 为 init 设置信号处理过程
2. 初始化控制台
3. 剖析/etc/inittab 文件
4. 执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5. 执行所有导致 init 暂停的 inittab 命令(动作类型: wait)
6. 执行所有仅执行一次的 inittab(动作类型: once)
一旦完成以上工作, init 进程便会循环执行以下进程:
1. 执行所有终止时必须重新启动的 inittab 命令(动作类型: respawn)
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提供初始化命令行的路径,一般是rcS路径
respawn 每当相应的进程终止时就会从新启动
askfirs 类似 respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使 init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下 enter 键
wait 告诉 init 必须等到相应的进程完成之后才能继续执行
once 仅执行相应的进程一次,而且不会等待它完成
ctratldel 当按下 Ctrl+Alt+Delete 组合键时,执行相应的进程
shutdown 当系统关机时,执行相应的进程
restart 当 init 重新启动时,执行相应的进程,通常此处所执行的进程就是 init 本身

 

你可能感兴趣的:(BootLoader,fs,操作系统,busybox,linux系统)