UEFI 引导与 BIOS 引导在原理上有什么区别?
摘要
其实UEFI 引导与 BIOS 引导在原理上区别总结下来就是:BIOS把MBR读出来交给CPU执行,做MBR做想做的事。UEFI是查找磁盘里的\efi\boot\bootx64.efi文件,启动这个可执行程序,让这程序做想做的事。直接好处除了开机快点外,最重要的是装系统超级方便了。把微软爸爸的系统镜像解压到U盘就能装机去了,不用再各种启动盘制作工具艹U盘的MBR(那些年战XP战各种主板兼容回忆起来真的一脸血)。
BIOS 启动流程
UEFI 启动流程
总结
目录
前几天明月给自己制作了一个 Win PE 引导优盘(可参考【体验最好的 windows PE 是什么?』一文),很多人可能不是很理解 UEFI 和 BIOS 引导在原理上的区别是什么,今天就收集整理出来分享给大家。算是一次科普知识分享吧。
其实 UEFI 引导与 BIOS 引导在原理上区别总结下来就是:BIOS 把 MBR 读出来交给 CPU 执行,做 MBR 做想做的事。UEFI 是查找磁盘里的\efi\boot\bootx64.efi 文件,启动这个可执行程序,让这程序做想做的事。直接好处除了开机快点外,最重要的是装系统超级方便了。把微软爸爸的系统镜像解压到 U 盘就能装机去了,不用再各种启动盘制作工具艹 U 盘的 MBR(那些年战 XP 战各种主板兼容回忆起来真的一脸血)。
先从启动流程上看区别在哪里?
BIOS 启动流程
系统开机 - 上电自检(Power On Self Test 或 POST)。
POST 过后初始化用于启动的硬件(磁盘、键盘控制器等)。
BIOS 会运行 BIOS 磁盘启动顺序中第一个磁盘的首 440bytes(MBR 启动代码区域)内的代码。
启动引导代码从 BIOS 获得控制权,然后引导启动下一阶段的代码(如果有的话)(一般是系统的启动引导代码)。
再次被启动的代码(二阶段代码)(即启动引导)会查阅支持和配置文件。
根据配置文件中的信息,启动引导程序会将内核和 initramfs 文件载入系统的 RAM 中,然后开始启动内核。
UEFI 启动流程
系统开机 - 上电自检(Power On Self Test 或 POST)。
UEFI 固件被加载,并由它初始化启动要用的硬件。
固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。
固件按照引导管理器中的启动项目,加载 UEFI 应用。
已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者
启动内核及 initramfs(对应于 GRUB 之类引导器的情况),这取决于 UEFI 应用的配置。
总结
区别其实很简单,传统 BIOS,我们也称之为 legacy bios,他的引导方式很简单,就是上电自检后,跑完 POST,干完一大堆活以后,会去读取启动设备的 0 磁道 1 扇区 上面的前 512 字节(MBR)的数据。这就是我们常说的启动扇区,boot sector,BIOS 会看最后两个字节是不是 55 AA,如果是就用一条 jmp 指令跳过去就是了
而 UEFI 引导则是基于文件系统的,理论上没有 MBR 这样的东西(当然,实际上为了兼容性等等一大堆问题,可能磁盘上还是会有个 MBR)。boot 的时候,加载启动设备上面的 uefi loader,换句话说,uefi loader 是一个永远也不会返回的 UEFI APP 就是了。