Linux开机启动过程详解

1.加载BIOS的硬件,与进行自我测试,并根据依据获得第一个可启动的装置。

由BIOS程序去加载CMOS的配置值,配置值包括主机的各项硬件信息.
然后BIOS还会进行自我测试.开始硬件的初始化.然后开始定义可启动装置顺序.
进行下一步读取MBR.

2.读取并运行第一个启动装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序)

BIOS是通过硬件中的INT13来读取MBR的.
硬盘中第一个扇区(MBR)里面存储着启动管理程序Boot Loader,是用来处理核心文件加载的.
以grub启动程序为例,系统读取内存中的grub配置信息(一般为menu.lst或grub.lst)
由Boot Loader程序读取/boot/grub/grub.conf
得到三段指令,
root(hd0,0)第一个硬盘第一个分区
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ 告诉kernel /boot下的vmlinuz是内核
nitrd /initrd-2.6.18-194.el5.img 将跟kernel相关的驱动放在initrd下

3.依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序

boot loader 管理读取核心文件之后,linux系统就会被压缩到主内存中.
此时linux核心会自动再检测一次硬件,不一定使用BIOS检测的硬件数据.
然后核心开始接管工作了.文件在/boot/vmlinuz中.

4.在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯

核心会主动的呼叫第一支程序,那就是 /sbin/init
/sbin/init 最主要的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等
init程序会通过/etc/inittab文件获取run-level
/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启

5.init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等
然后是从/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

6.init 运行 run-level 的各个服务之启动 (script 方式)

根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

7.init 运行 /etc/rc.d/rc.local 文件

这个文件就可以运行自己想要运行的系统命令,用户个性化设置.

8.init 运行终端机模拟程序 mingetty 来启动 login 程序,最后就等待使用者登陆啦

运行 /sbin/mingetty, mingetty就是在启动终端机的命令
然后执行/bin/login程序

    原文作者:Big_dimple
    原文地址: https://www.jianshu.com/p/37dd0371503a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞