在嵌入式Linux中,系统上电后,首先运行u-boot,u-boot引导内核启动
在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤:
1. 内核执行/sbin/init 文件,init进程开始运行
2. init进程分析并执行/etc/inittab 文件
3. init进程根据inittab文件执行/etc/init.d/rcS 文件
3.1/etc/init.d/rcS 执行
/etc/init.d/rcS.d/S*目录下的相关文件
4.init进程根据inittab文件中的runleve执行/etc/init.d/rc0.d到rc6.d目录中的一个目录中的文件
说明1:inittab文件内容
#设置默认的运行级别
id:5:initdefault:
#系统开机需要运行的第一个脚本
si::sysinit:/etc/init.d/rcS
# 运行级
#0 挂起系统,6 重新引导,1 单用户模式,2-5多用户模式
I0:0:wait:/etc/init.d/rc 0
I1:1:wait:/etc/init.d/rc 1
I2:2:wait:/etc/init.d/rc 2
I3:3:wait:/etc/init.d/rc 3
I4:4:wait:/etc/init.d/rc 4
I5:5:wait:/etc/init.d/rc 5
I6:6:wait:/etc/init.d/rc 6
上述格式如下(参考https://blog.csdn.net/pengrui18/article/details/49757451):
label:runlevel:action:process
action字段定义了该进程应该运行在何种状态下
boot
在系统启动时运行,忽略runlevel
bootwait
在系统启动时运行,等待init进程完成。忽略runlevel
ctrlaltdel 当Ctrl+Alt+Del三个键同时按下时运行,把SIGINT信号发送给init。忽略runlevel
initdefault 不要执行这个进程,它用于设置默认runlevel
kbrequest
当init从键盘中收到信号时运行。这里要求键盘组合符合KeyBoardSigral(参见/usr/share/doc/kbd-*关于键盘组合的文档)
off
禁止进入,因此该进程不运行
once
每一个runlevel级别运行一次
ondemand
当系统指定特定的运行级别A、B、C时运行
powerfail 当init收到SIGPWR信号时运行
powerokwait 当收到SIGPWD信号且/etc/文件中的电源状态包含OK时运行
powerwait 当收到SIGPWD信号,并且init等待进程结束时运行
respawn
不管何时终止都重新启动进程
sysinit
在运行boot或bootwait进程之前运行
wait
运行进程等待输入运行模式