8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

制作支持BIOS+UEFI双启的ISO镜像模板

尉官 caocaofff 2020-09-01 16:00:46 282

本文承接上文:https://pecmd.net/thread-78.htm

通过第三方制作工具,我们得到了想要的WinPE镜像,但是这些镜像是彼此独立的,所以我们需要制作出能通过菜单选择去启动的引导方式。

Legacy BIOS

在常规的BIOS引导模式下,主流应用于WinPE的引导管理器有:Windows Boot Manager、fbinst、Grub4Dos、Grub2、easyboot等。

但是我们最常用的是Grub4Dos,下面就讲一下如何从无到有去制作基于Grub4Dos的引导菜单。

首先需要建立一个目录用于存放ISO文件结构,例如在D盘新建ISO文件夹,之后的操作均在此文件夹内进行。

获取Grub4Dos

目前Grub4Dos的官网是:http://grub4dos.chenall.net/

打开官网后,找到最新的版本,点击标题

点击File后面的文件就可以下载到最新版文件

使用压缩软件打开压缩包,解压出grldr文件到D:\ISO目录

没错,我们只需要这一个文件即可。

下载BOOTICE

grldr文件有预设菜单,所以需要用第三方工具编辑内置菜单,这里推荐使用BOOTICE自带的编辑器功能。

打开BOOTICE,切换到实用工具栏,点击“启动编辑器”按钮,

在打开的GRUB4DOS Menu Editor界面,点击“打开”图标,打开D:\ISO\grldr文件

通过菜单内容,我们知道了它默认是读取\boot\grub\menu.lst、\grub\menu.lst、\menu.lst

这里我们可以约定一下,我们将主菜单文件放在固定位置\boot\grub\menu.lst,即D:\ISO\boot\grub\menu.lst

同时,我们也要考虑到隐藏区启动的问题,有部分网友喜欢使用UltraISO的隐藏写入功能,这时,你的内置菜单就需要调整一下了,可以参考这里的代码来实现读取隐藏区的菜单文件:https://pecmd.net/thread-29.htm

这里把最终的内置菜单写出来:

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

这里要注意,如果你的菜单里没有中文字符,就可以在保存时不选择“嵌入字模”功能,并且可以使用ANSI编码保存

这样你就实现了Grub4Dos引导的第一步。

接着,你需要新建目录,并且新建主引导菜单。

直接点击GRUB4DOS Menu Editor界面的“新建菜单”按钮,写入简单的菜单,然后将菜单保存到D:\ISO\boot\grub\menu.lst

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

我写的菜单功能很简单,先在常规字符界面下切换到VBE 640*480*24显示模式,然后展示一个标准的可选择菜单。

这里,我们使用了wimboot功能,可以利用它的特性去启动不同版本的WinPE,而不需要去修改微软的引导菜单文件。

wimboot文件下载:http://git.ipxe.org/releases/wimboot/wimboot-latest.zip

打开压缩包,将wimboot文件解压到boot目录

然后分别建立32位和64位Win10PE的文件夹,将生成器制作出的ISO文件里的/bootmgr、/boot/bcd、/boot/boot.sdi都解压到D:\ISO\boot目录,将32位和64位的ISO里的/sources/boot.wim分别解压到D:\ISO\boot\w10pe32、D:\ISO\boot\w10pe64目录;

目前的D:\ISO目录结构如下:

D:\ISO
│  grldr

└─boot
    │  bcd
    │  boot.sdi
    │  bootmgr
    │  wimboot
    │
    ├─grub
    │      menu.lst
    │
    ├─w10pe32
    │      boot.wim
    │
    └─w10pe64
            boot.wim

由于微软的引导文件是不区分32位和64位的,所以我们可以共用bcd、bootmgr、boot.sdi等文件;这里可能有同学会问了,BCD文件里的设备文件路径都不存在,为什么这里不去修改BCD文件呢?因为WIMBOOT有妙用,这里就不细说了,你只要知道最终的wim文件名一致,即使上级目录sources不存在,它也能找到boot.wim去加载。

UEFI

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

UEFI IA32

常规的启动流程是:\efi\boot\bootia32.efi——>\efi\microsoft\bcd——>\boot\boot.sdi——>\boot\w10pe32\boot.wim

如果是光盘启动,则在最前面需要一个\bootmgr.efi

这里就不继续使用工具生成的WinPE.ISO了,我们直接使用微软原版的光盘镜像提取文件。

将光盘里的\efi\boot\bootia32.efi、\efi\microsoft\bcd、\efi\microsoft\efisys.bin、\bootmgr.efi拷到D:\ISO对应目录下;

使用BOOTICE工具修改BCD文件的路径,打开BOOTICE并切换到“BCD编辑”选项卡,BCD文件选择“其他BCD文件”,然后选中D:\ISO\EFI\microsoft\boot\BCD

继续点击“智能编辑模式”

这里我们要修改右边的 【启动设备】——设备文件,将路径改成固定的\boot\w10pe32\boot.wim,然后在下面的【设置】——菜单标题中,改一个合适的标题,比如:Windows 10 PE IA32

修改完毕后点击下面的“保存当前系统设置”

UEFI X64

常规的启动流程是:\efi\boot\bootx64.efi——>\efi\microsoft\bcd——>\boot\boot.sdi——>\boot\w10pe64\boot.wim

如果是光盘启动,则在最前面需要一个\bootmgr.efi

这里我们继续使用微软原版的光盘镜像提取文件。

将光盘里的\efi\boot\bootx64.efi拷到D:\ISO对应目录下,由于之前已经拷贝过\efi\microsoft\bcd、\efi\microsoft\efisys.bin、\bootmgr.efi了,所以这里就不用再次复制了;

使用BOOTICE工具修改BCD文件的路径,打开BOOTICE并切换到“BCD编辑”选项卡,BCD文件选择“其他BCD文件”,然后选中D:\ISO\EFI\microsoft\boot\BCD

现在我们要在已有Windows 10 PE IA32菜单的基础上添加Windows 10 PE X64菜单,并且设置成默认菜单,20秒倒计时

先点击左侧的“添加”按钮,然后选择“新建 WIM 启动项”

现在我们可以开始设置这个新添加的菜单项了

右侧的【启动设备】——设备文件、【设置】——菜单标题、启动文件、系统语言、左侧的【全局设置】——超时时间 都需要设置,如下图一样设置就好了

将左侧的新添加的菜单选中后,点击“上移”按钮,然后点击左下角的“保存全局设置”按钮即可保存菜单设置;还有,右侧的【设置】里的“启用Win8Metro启动界面一定要取消勾选”。

还有部分情况下,我们会勾选“测试模式”和“禁用数字签名验证”,这样做是为了给后面WinPE打驱动时顺利一些。

现在可以看到Windows 10 PE X64已经是默认菜单了(“默认”按钮变灰),这时就可以关闭窗口退出BCD编辑了。

这里我建议你可以在退出BCD编辑后再打开一次,确认这些设置有没有正确生效,如果没有,一定要记得改正确。

编辑efisys.bin文件

这个efisys.bin文件实际是一个软盘映像文件,使用第三方软件UltraISO或WinImage都能直接打开编辑。

这里面主要存放着\efi\boot\bootia32.efi、\efi\boot\bootx64.efi,供ISO光盘启动时使用;当我们用ISO生成工具,比如mkisofs时,可以指定参数去选择这个文件作为光盘启动时的efi引导文件。

将之前拷贝到D:\ISO\efi\microsoft\efisys.bin移动到D:\ISO\efi目录下,使用第三方工具WinImage打开该文件

我们先将这个软盘映像体积扩大,选择“映像”——“更改格式”,选择标准格式2.88MB

如果你在这个映像文件中还需要放置更多文件,可以选择最下面的“选择自定义映像格式”,然后输入自己计算好的扇区总数即可。

在WinImage里定位到\efi\boot目录,将里面的bootia32.efi删除,同时在“映像”——“加入”中,选择D:\ISO\efi\boot目录下的bootia32.efi、bootx64.efi文件,加入后,点击保存。

这里还可以通过“映像”——“整理当前映像的碎片”功能来整理这个bin文件的碎片。

生成ISO镜像文件

我们可以使用mkisofs进行生成ISO文件。

看一下当前的D:\ISO目录结构:

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

我这里直接使用了自己写的U盘启动制作工具里的生成ISO功能,下载地址:https://www.cboot.org/post/12.html

按要求将MyBootMaker文件夹解压到D:\ISO,在D:\ISO新建一个version.txt文件(里面写一行version=我的WinPE合盘,也可以跳过此步骤);

打开MyBootMaker\MyBootMaker.exe,制作方式选择“生成ISO”,然后点击“制作”按钮:

等待制作结束:

这时,我们的ISO镜像就生成好啦!

验证ISO镜像

如果你安装有虚拟机,可以直接在虚拟机里加载生成的ISO并启动,同时测试Legacy BIOS和UEFI IA32、UEFI X64三种情况下能否正常启动。

我这里直接使用了微软操作系统自带的Hyper-v来验证:

注意,这里的验证仅仅是测试引导阶段是否正常,目前来看一切都很顺利。至于Legacy BIOS下启动Win10PE会提示缺少bootmgr.exe,这是Win10PE的问题,后面会介绍如何解决。

此处内容隐藏,登录后可见!立即登录  登录后请刷新页面!刷新

 

最后于 2020-09-04 20:11:57 被caocaofff编辑 ,原因:
上传的附件:
  • BOOTICEx64.zip (上传日期: 2020-09-01 16:00:46,大小:460.94K,下载次数:0)
  • WinImage.zip (上传日期: 2020-09-04 18:13:46,大小:599.23K,下载次数:0)
我的博客:www.cboot.org
最新回复 (0)
    • PECMD技术社区
      2
        登录 注册
返回