全面揭秘UEFI固件启动Windows全流程
全面揭秘UEFI固件启动Windows全流程
本系列文章阅读顺序:
- 计算机固件启动原理Windows系统引导启动流程第一篇
- 全面揭秘UEFI固件启动Windows全流程
- 核心配置BCD文件详解与BOOTICE编辑实战
- BIOS固件启动Windows系统
- 修复Windows系统引导的一般方法
UEFI 固件启动 Windows 系统
一般情况下,我们的Windows系统都安装在电脑里面的磁盘中.所以,想要启动Windows系统,UEFI固件首先就要识别到电脑里面的磁盘.
正常情况下,UEFI固件识别磁盘是一个很简单的事情,不需要我们做什么.
**UEFI固件可以识别MBR,GPT两种类型的磁盘分区表.**我们只需要保证磁盘正确连接在电脑里面(主板或USB接口上)就可以了.
识别完磁盘之后,UEFI固件就要对磁盘”下功夫”.他进行的下一步便是扫描磁盘的分区.
我们知道,磁盘上的空间可以被划分为很多分区.例如,C盘,D盘就可以是同一块磁盘的不同分区.
分区的基本参数是文件系统,Windows系统只能安装在NTFS文件系统的分区里面.当我们右键一个分区查看属性的时候,就可以看见他的文件系统了.
然而,UEFI固件是一个”傻子”.UEFI固件只能识别一些比较老式的文件系统类型,比如:FAT32,FAT16,FAT.
也就是说,纵使我们的磁盘上有好多分区,UEFI固件也只能识别出FAT32,FAT16和FAT文件系统的分区.
识别到这些分区之后,UEFI固件就可以读取这个分区里面的文件了.
※在Windows系统的计算机中,磁盘上面有一个十分重要的分区,名字叫做EFI分区.(或者ESP分区)
EFI分区
从名字可以看出,这个分区就是专门给UEFI分区用的.UEFI固件正是通过读取EFI分区里的文件并运行里面的程序来启动Windows的.
所以,理所当然的,EFI分区的文件系统类型是FAT32(或FAT16,本文为了方便,都使用FAT32为标准EFI分区文件系统).
EFI分区的本质就是一个文件系统为FAT32的分区.
所以,任何以FAT32为文件系统的分区都可以被视为EFI分区,被UEFI固件识别读取.
那么,EFI分区里面都有什么?他为什么要作为一个专门的分区供UEFI固件使用?他为什么在Windows系统启动的过程中如此重要?
因为EFI分区里面有Windows系统的引导文件.
笔者给出自己电脑的EFI分区的文件结构目录(不在讲解范围内的文件省略):
1 | |
下面,我将介绍一种”应用程序”:efi程序.
*.efi程序
和Windows系统里的exe软件一样,**efi程序就是在UEFI固件这个小型系统里的运行程序软件.**在上面的EFI分区文件目录里面,我们可以看见很多以efi为后缀名的文件,他们都是efi程序,只能在UEFI固件中运行.
例如: bootx64.efi,bootmgfw.efi,memtest.efi 等等.UEFI固件通过运行它们,进一步启动Windows系统,或者进行基本的计算机操作维护.
对于Windows系统来说,bootx64.efi,bootmgfw.efi这两个程序都是启动Windows的关键.(每一个都可以独立启动Windows)那么至于为什么有两个启动Windows的efi程序,我们一会再说明.
UEFI固件怎么知道自己要干什么?
问题来了:UEFI固件读取扫描到了EFI分区,也能访问EFI分区里的文件,但是,UEFI固件怎么知道要自己运行bootmgfw.efi或者bootx64.efi的?
这还是NVRAM的功劳.
NVRAM里面除了有UEFI固件整体代码,还记录了UEFI固件应该运行的efi程序所在的EFI分区是哪一个分区,以及efi程序所在位置的详细信息.
UEFI固件正是读取了这个记录,才能运行相应的efi程序,进行下一步操作.
不同分区都有自己独一无二的”身份证号”,即使两个分区的各个特征都一样(比如大小,文件系统类型…)它们的身份证号也不同.
这个身份证号的名字在计算机中叫做GUID.GUID是一长串**数字和字母的组合,**是随机生成的,也是唯一的.
事实上,NVRAM里记录的就是这个EFI分区的GUID,UEFI也是通过这个GUID找到正确的EFI分区.
我们也可以给身边的任何一个事物一个GUID号,比如,一盆向日葵.
一般来说,NVRAM里面不只记录了一个启动项目,而是记录很多的指向efi程序的启动项目.
但是通常情况下,这些项目并不是都有效的.UEFI固件会按照顺序从上到下依次尝试启动项目,并运行第一个尝试成功的efi程序.
例如,上图就是一个UEFI的启动菜单选择界面.我们可以通过开机的时候按下键盘上的开机热键的方式把开机过程”截住”,然后进入这个菜单页面.(不同品牌电脑开机热键不同,可以百度搜索)
我们可以看到,从Windows boot manager开始,到EFI VMWare Virtual NVME Namespace (NSID 2), 这些都是UEFI的启动项目.它们都记录在主板的NVRAM里面.
UEFI从上到下依次尝试启动,寻找并运行它们所指向的efi程序.
本系列文章阅读顺序:
- 计算机固件启动原理Windows系统引导启动流程第一篇
- 全面揭秘UEFI固件启动Windows全流程
- 核心配置BCD文件详解与BOOTICE编辑实战
- BIOS固件启动Windows系统
- 修复Windows系统引导的一般方法