1、加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置 2、读取并执行第一个开机装置内MBR的bootLoader 3、依据 bootloader的设定加载 Kernel 4、Kernel开始侦测硬件与加载驱动程序 (初始化Kernel) 5、把Kernel挂载到根文件系统上 6、启动完成
BIOS 全称"Basic Input Output System",中文名称是"基本输入输出系统"。它是一组固化到计算机内主板上一个ROM芯片上的程序,包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息等。
MBR 全称“MasterBoot Record” ,中文名称是“主引导分区”,是启动设备的第一个扇区,安装bootLoader的地方。
bootLoader 中文名称为“引导装载程序”,它是系统加电后运行的第一段软件代码,在操作系统内核运行之前运行的一段裸机程序,负责初始化硬件设备,准备好软件环境,最后调用操作系统内核。
bootLoader严重地依赖于硬件而实现的,所以不同的架构有着不同的bootLoader,常见的bootLoader有uboot,LILO,grub等
Kernel侦测硬件 当我们借由bootLoader的管理而开始读取内核文件后,接下来Linux就会将内核解压到主存储器当中,并且利用内核的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。 此时 Linux 核心会以自己的功能重新侦测一次硬件,而不一定会使用 BIOS 侦测到的硬件信息喔!
挂载根文件系统 由于核心模块(驱动程序)需要放置到磁盘根目录内, 因此在开机的过程中内核必须要挂载根目录,这样才能够读取核心模块提供加载驱动程序的功能。
启动过程流程图
问:
为什么开机不能直接执行kernel,把kernel放在启动设备的第一个扇区(即MBR所在的地方),把所有事情都交给kernel做呢?
其实它的思想类似于一个板级支持包:kernel执行的时候需要具备一个基本的硬件运行条件,而这个环境的初始化(最底层的一些硬件初始化、硬件信息设定)需要bootloader来完成,也许这样kernel的设计才能保持一定的一致性。