要制作一个小的Linux,我们就要了解Linux系统开机的整个过程,其实很简单,跟WIN差不多。
POST(BIOS加电自检)-->根据BIOS的设定启动相应的设备-->Boot loader -->解压内核到内存 -->运行init进程
整个过程大概如上所述。
其中,内核在加载的过程中所完成的工作包括以下:
硬件探测
完成设备驱动程序初始化(initrd获取驱动程序,以模块的形式存在)
挂载根文件系统(以只读方式挂载)
装载/sbin/init,启动系统的PID为1的进程
系统的主进程init主要是根据/etc/inittab文件中的定义,来进行工作的。下面再看一下inittab文件是怎么写的,我们可以man inittab看一下,该文件的组成部分以及各组成部分的详细信息。
NAME
inittab - format of the inittab file used by the sysv-compatible
init process
id:runlevels:action:process
各字段的解释
ID:就是一ID号,说白了就是一名字,代号,可以随便取。
RUNLEVELS:运行级别
ACTION:在什么情况下
PROCESS:运行什么命令
以下是action常用的选项
action:
respawn 重新启动,当进程结束后,将会马上被重启
wait只有进入某个特定级别以后process才会启动一次,并且直到其结束为止,不再有其它动作
initdefault 设定默认运行级别
sysinit 系统初始化,这个进程将在系统启动过程中会被执行一次
ctrlaltdel: 用户同时按下ctrl+alt+del执行进程
看一下inittab文件的内容
id:3:initdefault:
#名字叫id,运行级别为3,initdefault的意思上面已经有解释了。设定默认运行级别的
si::sysinit:/etc/rc.d/rc.sysinit
#名字叫si,运行级别没写,表示所有的运行级别,动作叫sysinit,表示系统的初始化,然后初始化要运行的脚本为/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
#名字叫 l1---l6,运行级别为0-6,分别对应系统的6个运行级别,每个级别分别运行所对应的/etc/rc.d/rc 0 在/etc/rc.d里有个脚本叫rc,这个脚本主要是调用/etc/rc.d/rc.[0-6]/目录里的文件,该目录里的文件都是以K加数字加服务名或者S加数字加服务名组成,其中K表示KILL,要杀掉的服务,也即是系统开机后,不运行的服务,S表示start,运行对应级别后,所要运行的服务,其后面所对应的数字是服务的优先级。
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#名字叫ca,所有运行级别,当按下Ctrl+Alt+Del的时候,运行/sbin/shutdown命令,也就是说:当用户按下CTRL+ALT+DEL组合键后,系统会在3分钟内重启。这样很危险,建议改成其它的。
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
#名字叫pf,所有的运行级别,powerfail表示停电之后(对UPS有效),执行后面的shutdown
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
#名字叫pr,在12345的运行级别,powerokwait 表示停电不久,在指定关机的时间内,又来电了,就执行后面的shutdown内容
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6