嵌入式系统内核启动后的第一个程序就是init,一般位于/sbin/init(一般是符号链接到/bin/busybox), 但有些也会直接放在根目录下如linuxrc,busybox的init不支持多级别启动(multiple runlevels),init也就是1号进程。
Init启动流程:
1、为init程序设置信号处理
2、初始化控制台console,它会首先读取kernel的启动参数,如果没有指定console,它会尝 试/dev/consloe
3、解析inittab文件 /etc/inittab
4、运行系统初始化脚本 /etc/init.d/rcS
5、运行所有inittab下action为wait的任务
6、运行所有inittab(只运行一次)下action为one的任务
执行完这些任务后,init程序会循环启动下列任务:
1、运行所有inittab下action为respawn的任务
2、运行所有inittab下action为askfirst的任务
3、等待子进程退出
/etc/inittab文件格式:
id:runlevel:action:process
Id表示从哪个console启动,对busybox无意义
runlevel,启动级别,忽略字段
action是非常重要的一个字段,有8个:
Sysinit 提供初始化脚本路径
Respawn 重启退出的子进程
Askfirst 询问用户,像“Please press Enter to activate this console.”
Wait 告诉init在继续运行前先等待子进程完成
Once 只执行一次,且不等待进程结束
CtrlAtlDel 按下组合键后执行的程序
Shutdown 关闭系统后执行的程序
Restart 当init重启后需要重启的程序
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
ttyS1::askfirst:/bin/ash --login