UEFI模块包含的文件逐个分析及其引导流程+ESP分区的本质
判断自己的机器是X64(64 bit)构架还是IA32(32 bit)的构架
给传统BIOS下的合盘添加UEFI模块支持+制作BIOS / UEFI(IA32+X64)
============================================
什么是UEFI
UEFI模块包含的文件逐个分析及其引导流程
★ —————–对于UEFI启动本身来说,这些文件是必需的
▲—————– 对于传统BIOS引导光盘来说,这些文件是制作时必需的
▲—————– 对于传统BIOS引导光盘来说,这些文件是引导时必需的
◆ —————–对于UEFI引导光盘来说,这些文件是制作时必需的
◆ —————–对于UEFI引导光盘来说,这些文件是引导时必需的
UEFI_MS必需————-在磁盘介质上,通过UEFI启动系统,这些文件是必需的
=======================================
根目录
├─boot ——————————–启动文件目录 UEFI_MS必需 + ▲
│ │ BCD ——————————–传统BIOS启动所需BCD菜单文件 ▲
│ │ boot.sdi ——————————–UEFI/BIOS启动都需要 UEFI_MS必需 + ▲+ ◆
│ ├─fonts ——————————–传统BIOS启动字体文件目录(不影响启动)
│ │ chs_boot.ttf
│ │ wgl4_boot.ttf
│ └─zh-cn ——————————–传统BIOS启动中文显示用的目录(不影响启动)
│ bootmgr.exe.mui
├─efi——————————–UEFI启动目录 ★ + UEFI_MS必需 + ◆
│ ├─zh-cn ——————————–UEFI启动中文显示用的目录(不影响启动)
│ │ bootia32.efi.mui
│ │ bootx64.efi.mui
│ ├─boot——————————–UEFI启动文件目录 ★ + UEFI_MS必需 + ◆
│ │ bootia32.efi——————————–IA32构架的启动文件 ★ + UEFI_MS必需 + ◆
│ │ bootx64.efi——————————–X64构架的启动文件 ★ + UEFI_MS必需 + ◆
│ └─microsoft——————————-UEFI启动目录 UEFI_MS必需 + ◆
│ ├─fonts ——————————–UEFI启动中文字体文件目录(不影响启动)
│ │ chs_boot.ttf
│ │ wgl4_boot.ttf
│ └─boot———————————UEFI启动菜单目录 UEFI_MS必需 + ◆
│ BCD——————————-UEFI启动菜单 UEFI_MS必需 + ◆
│
│─MBR.bin ————————制作传统BIOS下的启动光盘上时的引导记录,负责引导Bootmgr,适合x64+x86 ▲
│─bootmgr ———————–传统BIOS下的启动光盘的引导文件,适合x64+x86 ▲
│─UEFI_ALL.BIN—————–制作UEFi启动光盘上时的引导记录(已处理),可以同时支持引导IA32+X64构架,直接读取\efi\microsoft\boot\bcd ◆
│─winpe_x86.wim ——————————–适合IA32构架的winPE,目前仅有Win8 x86 UEFI_MS必需 +▲+ ◆
└─winpe_x64.wim ——————————–适合X64构架的winPE,目前有Win7/8 x64 UEFI_MS必需+ ▲+ ◆
==========================================
然后来说UEFI启动Windows 的简要流程:
—->>电脑开机(假设已经设置了UEFI为打开)
—->>启动模块根据启动项顺序依次查找所有
(FAT分区):\efi\boot\bootia32.efi(IA32构架的启动文件)
或者
(FAT分区):\efi\boot\bootx64.efi(X64构架的启动文件)
—->>加载\efi\microsoft\BCD 启动菜单文件
—->>按照BCD里面的内容进一步启动,整个过程和传统的BIOS相比,没有引导记录的参与,不错不错
提示:
以上的bootia32.efi,bootx64.efi 都是一个efi应用,不同的是使用在IA32或者X64构架下。你可以选择任意一个efi应用文件,然后改名替代上面的文件。
这里加载\efi\microsoft\BCD 启动菜单文件是因为当前的efi文件的内容是微软写的,efi内容下一步就指向\efi\microsoft\BCD
我们当然可以创建一个abc.efi,然后改名,bootx64.efi 或者bootia32.efi,让UEFI开机的时候加载,
然而你可以让你自己写的abc.efi指向某个目录的某个CFG文件这都随你愿意,从而实现调用……
为了证实这一点,我下载了EFI SHELL然后将Shell.efi改名为bootx64.efi,再在X64构架的物理计算机和虚拟机上,进行启动…
ESP分区的本质
ESP:
EFI System Partition
它是当我们首次为GPT磁盘分区时会提示建立的,对于UEFI启动来说,ESP分区不是必需的,但是一个FAT分区确是必须的
ESP的本质是一个FAT分区,只不过分区程序在给GPT磁盘分区的时候提醒你建立ESP,并且你同意了,那么程序将建立一个指定大小的FAT分区,
并且命名为”ESP”,从这里我们可以看出 ESP分区可以用任意位置的任意大小的任意FAT分区代替。
有网友会问,如果存在多个磁盘,每个磁盘上存在多个FAT分区,怎么算:
这么算:多个磁盘根据设定的磁盘启动顺序依次启动查找FAT分区
每个磁盘多个FAT分区,那么谁在前,谁有正确的引导资料就引导谁
ESP分区不可见:它是一个特殊的FAT分区,当然能够被任何FAT分区代替,它的特殊性在于,每次关机重启后,ESP分区的状态
总会变成不可见,这不是设置隐藏属性,因为ESP没有任何隐藏属性,更加类似于开机过程中系统将ESP的盘符删除了,
让人不能在计算机直接访问 (G部分有解决方案)
注释:
比如我的电脑是X64构架的(物理决定),我的UEFI启动文件只能是(FAT分区):\efi\boot\bootx64.efi,
而如果没有bootx64.efi文件存在的话,UEFI就启动失败,即使存在bootia32.efi,也没用因为那是IA32构架的电脑使用的
X64构架的电脑使用不了,即使改名,也会因为下一步读取BCD进一步启动因为和winload.efi不匹配而失败。
同理IA32构架的电脑只能使用bootia32.efi。
其实换句话说,X64构架的电脑在UEFI模式下应该是无法使用Win8 x86的系统和PE的,IA32在UEFI模式下也同样无法使用Win7/8 x64的系统和PE
只有在BIOS模式下X64.IA32才可以,任意使用Win7/8 x86/x64.
联系起以后大内存以及X64的普及,那么以后的电脑基本都是X64的物理构架,IA32的构架将会很少,
制作BIOS / UEFI (IA32+X64)三支持启动ISO
废话少说,现在开始:
要制作 BIOS/UEFI双启动ISO 你首先必须了解怎样制作ISO,普遍的我们使用微软的一款叫OSCDimg.exe的命令行工具,该工具非系统自带需要另外下载。
OSCDimg.exe的版本有很多,当然老版本的是无法制作BIOS/UEFI双启动ISO的我们要使用2.55版本的。
说完制作工具,再说制作要点,制作BIOS/UEFI双启动ISO需要两部分的引导记录(重点):
MBR引导记录:MBR.bin
UEFI引导记录:UEFI_X64.bin,UEFI_ia32.bin (前者X64构架用,后者IA32构架用)
再仔细注意下面的OSCDIMG的批处理命令,这是制作BIOS/UEFI双启动ISO另外至关重要的一点,我一测试完毕(重点):
@echo off
::要压制的目录,相当于光盘的根目录,表示当前目录下的Root_Dir目录
set intdir=.\Root_Dir
::设置光盘的引导文件MBR,表示当前目录下的MBR.bin文件
set BbootFile=.\MBR.bin
::设置光盘的引导文件UEFI,区分IA32构架引导文件UEFI_ia32.bin,X64构架引导文件UEFI_X64.bin
set UbootFile=.\UEFI_x64.bin
::输出的文件名,表示输出到当前目录下的BootISO.iso文件
set output=.\BootISO.iso
::设置光盘的卷标,表示光盘的卷标是:Bootable
set jb=Bootable
::根据上面已设置的参数,制作
OSCDimg -m -o -u2 -udfver102 -l%jb% -bootdata:2#p00,e,b%BbootFile%#pEF,e,b%UbootFile% %intdir% %output%
学到了学到了