共计 1581 个字符,预计需要花费 4 分钟才能阅读完成。
导读 | 引导过程指的是从计算机通电那一瞬间到 CPU 开始执行操作系统代码时的整个过程。在这个非常初期的阶段汇总,CPU 执行标准的启动代码。这部分代码需要对硬件设备进行探测,寻找最有可能启动的操作系统并且根据用户定义的参数启动这个操作系统。 |
大部分 PC 机仍然使用 BIOS 引导,默认(通用)的引导加载器(boot loader)。BIOS 是一种类型的固件,提供一些简单的菜单项,用户通过这写菜单项可以修改主板参数、引导设备顺序等内容。固件(firmware)可以看做一种软件,这种软件被写入芯片,所以是“固化”的。固件代码本身可以保存在只读存储器(ROM)中。也可保存在可编程只读存储器(PROM)或者电可擦除只读存储器(EEPROM)中,后两种形式更为常见。
- 自诊断程序:通过读取 CMOS 中的硬件配置,并对其自检和初始化
- CMOS 设置程序:引导过程中,用特殊热键启动,进行设置后,存入 CMOS RAM 中
- 系统自举装载程序(bootstrap):在自检成功后将磁盘相对 0 道 0 扇区上的引导程序装入内存运行
- 主要 I / O 设置的驱动程序和中断服务
BIOS 和固件的功能是一样的:加载一些基本的自举(bootstrap)代码给 CPU 执行。自举程序和 BIOS 或者固件的职责是:初始化硬件、检测硬件、定位这些引导设备、执行引导加载器程序;引导加载器程序的职责是:寻找选择的操作系统、将所有必要的命令行参数传递给操作系统内核。
传统的 BIOS 引导操作系统(Windows)如下图:
计算机开机后,固化在 ROM 中的 BIOS 会被加载到内存运行,BIOS 自检完毕后就会加载 COMS 的参数,通过 COMS 的参数,BIOS 加载启动磁盘的 MBR 到内存运行。通过运行 MBR 的代码,记录在 MBR 分区表中,标记为活动分区的磁盘分区 PBR(Partition Boot Record)被加载到内存运行,PBR 在运行后可加载操作系统加载器(如 Windows 的 bootmgr)的代码到内存运行,操作系统加载器可加载操作系统内核到内存运行,进而完成 BIOS 的引导流程。
EFI(Extensible Firmware Interface)是一种取代传统 BIOS 的技术。BIOS 是一个固定的程序,而且通常是封闭的。EFI 是一个全功能的运行时系统,在引导期间提供了更为强大的接口,甚至在之后的运行时也提供了接口,EFI 程序通常是引导加载器。EFI 程序实际上是一个二进制程序。
EFI 的一般由一下几部分组成:
- Pre-EFI 初始化模块
- EFI 驱动执行环境
- EFI 驱动程序
- 兼容性支持模块(CSM)
- EFI 高层应用
- GUID 磁盘分区
NVRAM 是固件接口中一个非常强大的功能,而且这显然是 BIOS 没有的功能,NARAM 变量是在系统范围内存在的,操作系统和固件本身都可以访问。一般来说。NVRAM 变量可以分为以下几类:
- 引导相关的变量:用于指定要引导的内核和根文件系统,还负责向内核传递参数。
- 固件内部变量:固件使用的变量,一般被操作系统忽略
- 临时变量:根据需要设置或清空,通常在重新引导的时候不会保留
EFI 引导操作系统 (Windows) 过程如下图:
计算机开机后,就会加载固化在只读存储器 RAM 中的 pre-EFI 初始化程序,进行主桥及存储器的初始化工作,紧接着载入 EFI 驱动执行环境 (DXE),EFI 驱动会被相继加载及初始化,接着加载、启动 EFI 系统,在 EFI 系统启动后,GUID 分区表就会被识别,之后 EFI 系统通过加载 NVRAM 的参数来决定是否启动 BootCamp 程序(苹果双重引导的解决方案),不启动 BootCamp 程序就会启动启动装载程序(Boot Loader) 加载操作系统内核,完成 EFI 的引导流程。