制作支持BIOS+UEFI双启的ISO镜像模板(wimboot方式启动)
2020-9-1 9985

之前通过第三方制作工具,我们得到了想要的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去加载。

 

补充

使用Grub4Dos方式启动的其他菜单示例:

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

UEFI

UEFI分为IA32和X64

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功能,下载地址:U盘启动制作工具,无损三分区+双分区+单分区+生成ISO+自定义Logo+支持背景音乐

按要求将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的问题,请将Windows\Boot目录下相关文件补充完整。

 

 

最后于 2022-11-13 被caocaofff编辑 ,原因: 目录树高亮测试
上传的附件:
  • BOOTICEx64.zip (上传时间:2020-09-01 16:00:46,大小:460.94K,下载次数:79)
  • WinImage.zip (上传时间:2020-09-04 18:13:46,大小:599.23K,下载次数:75)
收藏
点赞
道具卡
分享
官方QQ群:872611894(人少,慎加😜)
最新回复 (63)
  • avatar image
    eswaralal 2021-11-2

    How to edit this boot manger do we have any tool or do we need to use specifiy tool to design? Thanks

    ❤️ All
  • avatar image
    caocaofff 2021-11-2
    楼主   3
    eswaralal How to edit this boot manger do we have any tool or do we need to use specifiy tool to design? Thank ...

    Use BOOTICE to edit grldr file

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    铭浩 2021-11-2

    那么怎么把03PE放入呢

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2021-11-3
    楼主   5
    铭浩 那么怎么把03PE放入呢

    menu.lst添加菜单

    title Widows Sever 2003 PE
    map --mem ()/WINPE.ISO (0xFF)
    map --hook
    chainloader (0xff)

    自己修改Win2003PE的ISO的路径

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    忘川4728 2021-12-25

    请问大佬,提示 file not found 怎么办?

  • avatar image
    caocaofff 2021-12-25
    楼主   7
    忘川4728 请问大佬,提示 file not found 怎么办?

    没找到文件,确认一下路径是否正确吧

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    铭浩 2022-2-27

    上面传统启动的黑框里的代码写在哪里?并且怎么承接隐藏分区的那个帖子?:并且怎么把主菜单放在guilb位置里?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2022-2-27
    楼主   9
    铭浩 上面传统启动的黑框里的代码写在哪里?并且怎么承接隐藏分区的那个帖子?:并且怎么把主菜单放在guilb位置里?

    按本贴步骤自己做一遍就大致明白了

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    protonjsonli 2022-3-3

    你好,按流程做了一遍,但是一直 提示 ”没有找到"C:\Users\john\Desktop\ISO\Boot\etfsboot.com"文件或"C:\Users\john\Desktop\ISO\grldr"文件或"C:\Users\john\Desktop\ISO\EFI\microsoft\boot\efisys.bin"文件,停止代码运行。”

    我仔细看了目录  下面两个文件是存在的

    C:\Users\john\Desktop\ISO\grldr"

    "C:\Users\john\Desktop\ISO\EFI\microsoft\boot\efisys.bin" 

    我用的 5.6 版本,谢谢

  • avatar image
    caocaofff 2022-3-3
    楼主   11
    protonjsonli 你好,按流程做了一遍,但是一直 提示 ”没有找到"C:\Users\john\Desktop\ISO\Boot\etfsboot.com"文件或"C:\Users\joh ...

    换到其他分区目录再制作,标记文件要添加好,文件结构参考本社区发布的CCPE

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    protonjsonli 2022-3-3
    caocaofff 换到其他分区目录再制作,标记文件要添加好,文件结构参考本社区发布的CCPE

    好的,谢谢回复!

    我换个目录试试

  • avatar image
    铭浩 2022-3-4
    caocaofff 按本贴步骤自己做一遍就大致明白了

    那么想03PE和Xppe怎么支持,并且32位UEFI自动略过。

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2022-3-5
    楼主   14
    铭浩 那么想03PE和Xppe怎么支持,并且32位UEFI自动略过。

    参考已补充的菜单。(启动ISO或XP的方式)

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    铭浩 2022-3-5
    caocaofff 参考已补充的菜单。(启动ISO或XP的方式)

    有几个问题,bios启动读取隐藏分区的那个帖子https://pecmd.net/thread-29.htm里面的代码是直接写在pxe detect

    configfile (bd)/boot/grub/menu.lst || find --set-root /boot/grub/menu.lst && configfile /boot/grub/menu.lst

    set eb=0

    dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502

    set /a pe=*393216 && set /a ps=*393220

    write 393216 0

    write 393220 0

    map (hd0)%pe%+%ps% (17)

    map --hook

    set pe= && set ps=

    set eb=17

    rootnoverify (17)

    ls (17)/ > nul

    configfile (17)/boot/grub/menu.lst

    pause Error: menu.lst not found! && commandline

    这行代码的前面吗,还是随便写在编辑框的某一位置?

    2.补充

    使用Grub4Dos方式启动的其他菜单示例这里是需要挑选需要的代码行还是需要全部写入?并且把xppe和03PE的wim放在那里?

    3.UEFI软盘体积修改那里比如我要放一个win864一个win1064和win1164该怎么修改,需要修改多大体积?是可以随便改吗?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    铭浩 2022-3-14

    版主是不是没有看到?,.UEFI软盘体积修改那里比如我要放一个win864一个win1064和win1164该怎么修改,需要修改多大体积?是可以随便改吗?还有这个贴子里https://pecmd.net/thread-29.htm    搜索隐藏分区这几行代码是只支持BIOS还是BIOS和uefi均可用?代码写哪里?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2022-3-14
    楼主   17
    铭浩 版主是不是没有看到?,.UEFI软盘体积修改那里比如我要放一个win864一个win1064和win1164该怎么修改,需要修改多大体积?是可以随便改吗?还有这个贴子里https://pecmd.ne ...

    你一下子问了太多。。。

    创建efisys.bin就按教程做就行,要想启动多个WinPE直接修改BCD文件,加菜单。

    搜索隐藏分区的代码只适用于BIOS启动,代码写到grldr文件里,用BOOTICE编辑菜单。

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    caocaofff 2022-3-14
    楼主   18
    铭浩 有几个问题,bios启动读取隐藏分区的那个帖子https://pecmd.net/thread-29.htm里面的代码是直接写在pxe detect configfile (bd)/boot/gru ...

    1、菜单直接写到grldr文件,正式的菜单文件menu.lst放到/boot/grub/目录

    2、补充的菜单是按需选择。话说你的XPPE或03PE的映像文件一般是IS_或IM_,很少有WIM格式,启动WIM格式的菜单我没写

    3、按教程做,因为UEFI启动只能选择一个EFI文件,不可能选择多个

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    铭浩 2022-3-14

    我没有32位PE,可以不执行UEFI IA32的操作不复制UEFI IA32的文件吗,直接在uefi64教程操作里复制32我没复制的那些文件执行可以吗?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    铭浩 2022-3-14

    还有编辑BIOS启动时从grldr文件编辑时还用删除原有代码吗?还是直接把需要的代码直接不带换行地写在原有代码下?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2022-3-14
    楼主   21
    铭浩 我没有32位PE,可以不执行UEFI IA32的操作不复制UEFI IA32的文件吗,直接在uefi64教程操作里复制32我没复制的那些文件执行可以吗?

    可以

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    caocaofff 2022-3-14
    楼主   22
    铭浩 还有编辑BIOS启动时从grldr文件编辑时还用删除原有代码吗?还是直接把需要的代码直接不带换行地写在原有代码下?

    原有代码全部删除

    官方QQ群:872611894(人少,慎加😜)
  • avatar image
    铭浩 2022-3-14

    好的,谢谢版主!😆

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    铭浩 2022-3-15
    caocaofff 原有代码全部删除

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

     

    -------- 登录可见内容 --------

     

    pxe detect

    configfile (bd)/boot/grub/menu.lst || find --set-root /boot/grub/menu.lst && configfile /boot/grub/menu.lst

    set eb=0

    dd if=(hd0)96+1 of=(md)768+1 bs=1 count=8 skip=502

    set /a pe=*393216 && set /a ps=*393220

    write 393216 0

    write 393220 0

    map (hd0)%pe%+%ps% (17)

    map --hook

    set pe= && set ps=

    set eb=17

    rootnoverify (17)

    ls (17)/ > nul

    configfile (17)/boot/grub/menu.lst

    pause Error: menu.lst not found! && commandline

    这行代码里有https://pecmd.net/thread-29.htm这贴的隐藏读取代码吗,没有直接写在上面那行代码的上面?两组代码中间不需要换行吧。

    还有要是想添加别的PE直接都写在新建菜单一起吗?

    想支持中文显示的具体办法是什么?

    B站UP主,昵称为system32老马,爱好PE和windows系统,欢迎和我讨论,QQ号:2517588842
  • avatar image
    caocaofff 2022-3-15
    楼主   25
    铭浩 把最终的内置菜单写出来: -------- 登录可见内容 -------- pxe detect configfile (bd)/boot/grub/menu.lst || find - ...

    两边都是一模一样的代码。

    新的菜单请写到/boot/grub/menu.lst

    支持中文直接使用BOOTICE的嵌入字模功能,保存编码使用UTF-8

    这些都是很基础的问题,拆开别人的ISO看看就学会了。

    官方QQ群:872611894(人少,慎加😜)
返回