linux启动过程
为了找工作我也是拼了,只会linux常用操作怎么行,好想看看内核源码,还是先搞清楚linux是怎么工作的吧
看了鸟哥的私房菜,做了些笔记:
系统启动的过程:
- 加载bios的硬件信息与自我测试,依据设置取得第一个可启动设备
- 读取并执行第一个启动设备内的MBR的boot loader(grub)
- 依据boot loader的设置加载kernel,kernel会开始检测硬件与加载驱动程序
-
从加载内核开始:
linux将内核解压缩到内存中,利用内核的功能,开始检测硬件,此时,内核开始接管bios工作
内核文件为/boot/vmlinuz
-
- 在硬件驱动成功后,kernel会主动调用init进程,而init会驱动run-level信息
-
内核加载完成后,开始执行第一个linux程序,/sbin/init,所以这个进程的pid 是1
/sbin/init的任务是准备软件的执行环境,包括主机名、网络设置等。ubuntu里,这些操作在/etc/rcS.d中
-
- 准备软件执行的操作环境,/etc/init/rc-sysinit.conf指定了default level,我这里是2,所以下面启动的是/etc/rc2.d中的script
- init执行run-level的各个服务的启动(script的方式)在/etc/rcX.d中的文件
- Init 执行/etc/rc.d/rc.local文件,这里是你想要执行的启动时系统命令
- init执行终端机模拟程序mingetty来启动login进程,等待用户登录
不同的level启动时,执行的是不同的/etc/rcX.d里的文件,S开头的代表是启动,K开头的代表是关闭,K,S后面的数字代表的是启动顺序,数字越大的执行的越靠后
在切换不同的run level时,会先比较下两个level的文件夹中S K文件的不同,启动、关闭对应进程。