转自 http://blog.csdn.net/yj4231/article/details/7757856
PC主机:Ubuntu 和 redhat 9.0
目标板:TQ2440开发板 cpu:s3c2440 linux内核:2.6.30
NOTE:这里的讲解将针对嵌入式Linux,而不是一般的PC平台。
如发现错误欢迎指正。
首先,先来看下我的/etc/inittab是怎么样的,然后再详细说明。
[cpp]
view plaincopy
- [root@yj423 /]#cat /etc/inittab
- ::sysinit:/etc/init.d/rcS
- console::respawn:-/bin/sh
- ::once:/usr/sbin/telnetd -l /bin/login
- ::ctrlaltdel:/sbin/reboot
- ::shutdown:/bin/umount -a -r
这个配置文档的内容什么时候会被执行呢?
当用户进程init启动以后,该进程会读取该配置文档中的内容,然后执行。而在嵌入式系统中,用户进程init通常就是由busybox产生的/linuxrc。
该文档中每一行的格式如下:
:::
id:该字段通常是busybox的init进程来用来寻找controlling tty,也就是终端设备。这个字段的前面会被加上/dev/。在上面的例子中我的终端设备就是/dev/console。
runlevels:该字段被忽略。也就是说,busybox的init不支持运行级别。
action:该字段用于描述后面process的运行方式。在busybox中,有效的action包括如下几种:
sysinit——在系统启动阶段,后面的process将被执行。在上面例子中,执行rcS脚本。
respawn——当后面的process进程结束时,该进程又会被重启。
askfirst——这个类似于上面的respawn,但是在运行process之前,它会打印"Please press Enter to activate this console.",然后等待用户按下Enter来启动该
process。通常askfirst是用于启动终端设备的,如果不想看到这个提示,就像我那样使用respawn,而非askfirst.
wait——init进程会等待该process执行完毕,然后执行下一项。
once——process只会执行一次。在上面的例子中,执行telnetd守护进程,-l参数表示连接时,使用login登录。同时执行login程序。
restart——重新启动init进程时执行process.
ctrlaltdel——当Ctrl+Alt+Del三个键同时按下后,init进程就会收到SIGINT信号,此时运行process。
shutdown——在系统关机的时候执行process。在上面的例子中,在关机时卸载了所有已挂载的设备。
process:该字段表示要执行的程序和相应的参数。
[cpp]
view plaincopy
- console::respawn:-/bin/sh
这句表明:/bin/sh在/dev/console这个tty上被执行。“-”表示该shell为 login shell。
如果没有inittab文件,init进程将使用默认的行为:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::restart:/sbin/init