无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)最好用的系统一键装机工具广告联系 QQ:184822951 微信:wuyouceo
查看: 13090|回复: 188

[原创] NTBOOT & wimboot for UEFI GRUB2

    [复制链接]
发表于 2019-11-20 17:40:12 | 显示全部楼层 |阅读模式
本帖最后由 wintoflash 于 2020-7-16 20:35 编辑

本帖内容不再更新,项目中止。愿意接手的可以到GitHub发PR和issue。
----------------------------

wimboot
根据 ipxe wimboot 移植的模块,适用于 BIOS/UEFI,可以启动并修改 Windows NT6+ WIM。
使用方法
  1. wimboot [BOOT_OPTIONS] [BCD_OPTIONS] @:NAME1:FILE1 @:NAME2:FILE2 ...
  2. BOOT OPTIONS (启动参数)
  3. -g, --gui 显示图形启动界面 (不推荐开启)
  4. -p, --pause 显示调试信息并在启动过程中暂停
  5. -b, --rawbcd 禁用 BCD 自动修改 (.exe 改为 .efi)
  6. -w, --rawwim 禁用 WIM 自动修改
  7. -i, --index=n 指定要启动的WIM卷号
  8. -p, --pause 启动前暂停
  9. -j, --inject=WIN32_PATH 指定射入文件夹,默认为 \Windows\Syatem32

  10. @:NAME:FILE
  11. 指定要加载的文件 FILE,其被射入虚拟盘后文件名为 NAME。若未射入 BCD 或 boot.sdi,将使用内置 BCD 和 boot.sdi

  12. BCD OPTIONS (BCD 内部启动选项,仅当使用内置 BCD 时才有效。在使用 yes|no 的地方,也可以使用 on|off, true|false, 1|0):
  13. --testmode=yes|no 测试模式 (testsigning)。
  14. --highest=yes|no 强制使用最高分辨率。
  15. --nx=OptIn|OptOut|AlwaysOff|AlwaysOn 指定 NX 策略。
  16. --pae=Default|Enable|Disable 指定 PAE 策略。
  17. --detecthal=yes|no 检测 HAL 和 kernel。
  18. --winpe=yes|no 启动到 WinPE 模式 (/MININT)。
  19. --timeout=n 设定超时。
  20. --novesa=yes|no 禁用 VESA BIOS 调用。
  21. --novga=yes|no 禁用 VGA 模式。
复制代码

示例1: 启动 WIM
  1. wimboot --rawwim @:bootmgfw.efi:/boot/grub/bootmgfw.efi @:boot.wim:/wim/wepe.wim
复制代码

示例2: 启动 WIM,关闭测试模式,启用 PAE
  1. wimboot --testmode=no --pae=Enable --rawwim @:bootmgfw.efi:/boot/grub/bootmgfw.efi @:boot.wim:/wim/wepe.wim
复制代码

示例3: 启动 WIM 的第二卷,并射入替代 explorer
  1. wimboot --index=2 @:bootmgfw.efi:/boot/bootmgfw.efi @:explorer.exe:/boot/explorer.exe \
  2.             @:WinXShell.exe:/boot/WinXShell.exe @:WinXShell.jcfg:/boot/WinXShell.jcfg \
  3.             @:winpeshl.ini:/boot/winpeshl.ini @:boot.wim:(loop)/sources/boot.wim
复制代码

注意事项
wim 文件体积不得超过 4GB。

NTBOOT
根据 chenall 的 GRUB4DOS NTBOOT 移植的模块,适用于 BIOS/UEFI,可以启动 Windows 系统/WIM/VHD。
使用方法
  1. ntboot [-g] [-p] -e FILE [-s FILE] [BOOT_TYPE] [BCD_OPTIONS] FILE
  2. -g, --gui 显示图形启动界面 (不推荐开启)
  3. -p, --pause 显示调试信息并在启动过程中暂停
  4. -e, --efi=FILE 指定 bootmgfw.efi / bootmgr.exe 的路径。
  5. -s, --sdi=FILE 指定 boot.sdi 的路径。若无此参数,则使用内部生成的 boot.sdi。

  6. BOOT TYPE (指定启动文件类型,默认情况下根据文件扩展名自动判断):
  7. -w, --wim 指定启动类型为 wim。
  8. -n, --win 指定启动类型为 Windows 系统。
  9. -v, --vhd 指定启动类型为 VHD。
  10. -r, --ramvhd 指定启动类型为 RamOS VHD (此选项仅供测试)

  11. BCD OPTIONS (BCD 内部启动选项,在使用 yes|no 的地方,也可以使用 on|off, true|false, 1|0):
  12. --testmode=yes|no 测试模式 (testsigning)。
  13. --highest=yes|no 强制使用最高分辨率。
  14. --nx=OptIn|OptOut|AlwaysOff|AlwaysOn 指定 NX 策略。
  15. --pae=Default|Enable|Disable 指定 PAE 策略。
  16. --detecthal=yes|no 检测 HAL 和 kernel。
  17. --winpe=yes|no 启动到 WinPE 模式 (/MININT)。
  18. --imgoffset=n 指定内存盘偏移 (RamOS VHD)。
  19. --timeout=n 设定超时。
  20. --novesa=yes|no 禁用 VESA BIOS 调用。
  21. --novga=yes|no 禁用 VGA 模式。
复制代码

示例1: 启动WIM
  1. ntboot --efi=/xxx/bootmgfw.efi --wim /xxx/xxx.wim
复制代码

示例2: 启动VHD
  1. ntboot --efi=/xxx/bootmgfw.efi --vhd /xxx/xxx.vhd
复制代码

示例3: 启动 Windows 系统
  1. ntboot --efi=/xxx/bootmgfw.efi --win (hd0,4)
复制代码

示例4: 启动WIM,禁用测试模式,启用 PAE
  1. ntboot --efi=/xxx/bootmgfw.efi --wim /xxx/xxx.wim --testmode=no --pae=Enable
复制代码

深度录屏_vmware_20191120170611.gif
注意事项
只支持硬盘 mbr/gpt 分区表 FAT/NTFS 分区上的文件。
启动 VHD 可能会有个错误(如下图),不过不要慌,按两遍回车就可以了。
深度截图_plasmashell_20191120170659.png

下载
https://github.com/a1ive/grub/releases/tag/latest

技术细节
wimboot 可以生成一个 bootmgfw.exe/bootmgr.exe 可识别的单分区 FAT32 虚拟盘, 将 bootmgfw.efi, bcd 等文件放入其中即可启动。BCD 文件为 bootmgfw.efi 读取的启动配置文件,其格式为 REGF (Windows 注册表)。关于 REGF,可以到这里了解更多。boot.sdi 文件为 bootmgfw.efi 启动 WIM 必须的 System Deployment Image 文件,可以到这里了解更多。wimboot 内置了一个 REGF/BCD 解析器,可以解析并自动修改 BCD 的内容;同时也内置了 boot.sdi 生成工具,可以自动生成所需的 boot.sdi。wimboot 启动方式与 NTBOOT 启动方式的主要区别是 wimboot 启动时,WIM 文件也放入FAT32虚拟盘中,而 NTBOOT 启动时,WIM 不在启动盘中。因此,wimboot 方式可以虚拟修改 WIM 内容,向其中插入文件而不用改变实际文件内容,NTBOOT 则不可以。wimboot 会将除了 bcd, boot.sdi, WIM 自身之外的所有文件都射入 WIM 的 \Windows\System32 目录下。但是由于 VHD 启动过程中需要从真实硬盘读取 VHD,所以 wimboot 方式无法启动 VHD。


  1. grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi all_video bitmap bitmap_scale blocklist boot cat chain cmp commandline configfile cpio date datehook dd disk echo efi_gop efi_uga efifwsetup exfat expr ext2 extcmd fat fb file font fshelp getenv getkey gfxmenu gfxterm gfxterm_background gfxterm_menu gzio halt hashsum help hexdump iso9660 jfs jpeg keystatus linux linuxefi loadenv loopback ls lua lzopio memdisk minicmd multiboot multiboot2 newc normal ntfs part_gpt part_msdos partnew parttool png probe progress random read reboot regexp sbpolicy search sleep squash4 tar terminal terminfo test tga time udf vhd video video_colors video_fb videoinfo xzio map wimboot ntboot
复制代码


参考
参考了以下项目的代码或文档,感谢开源
iPXE wimboot
NTBOOT by chenall
quibble
REGF Spec
BCD Elements
SDI Spec

源码
https://github.com/a1ive/grub 许可协议 GPLv3

评分

参与人数 18无忧币 +93 收起 理由
879792799 + 5 大大是独一无二的高手!
zhczf + 5 很给力!
brook + 5 很给力!
cuicongyuan + 5 赞一个!
johnyou + 3 赞一个!
sghihor + 5
2011yaya2007777 + 5 很给力!
Climbing + 5 赞一个!
826773297 + 5 很给力!
chenall + 5 很给力!
liuzhaoyzz + 10 很给力!
liaonf + 5 赞一个!
2010sya + 5 赞一个!
hilsonma + 5 很给力!
freesoft00 + 5
ksafei + 5 很给力!
江南一根葱 + 5 努力秒杀xorboot 踏平udm
bardlet + 5 赞一个!

查看全部评分

发表于 2019-11-20 17:51:59 | 显示全部楼层
前排支持一下
回复

使用道具 举报

发表于 2019-11-20 18:01:40 | 显示全部楼层
LZ最近移植的功能多,要升仙封神了

点评

红毛改个磁盘驱动出来,让瘟哆撕能认到grub2的内存盘  详情 回复 发表于 2019-11-20 19:18
回复

使用道具 举报

发表于 2019-11-20 18:49:54 | 显示全部楼层
支持一下支持一下支持一下
回复

使用道具 举报

发表于 2019-11-20 19:18:39 | 显示全部楼层
红毛樱木 发表于 2019-11-20 18:01
LZ最近移植的功能多,要升仙封神了

红毛改个磁盘驱动出来,让瘟哆撕能认到grub2的内存盘
回复

使用道具 举报

发表于 2019-11-20 19:25:25 | 显示全部楼层
期待支持 差分及VHDX

点评

同求  详情 回复 发表于 2020-1-11 21:09
如果bootmgfw.efi能直接启,那就行,否则,不行.  详情 回复 发表于 2019-11-20 21:27
回复

使用道具 举报

发表于 2019-11-20 20:36:16 | 显示全部楼层
很给力!
回复

使用道具 举报

发表于 2019-11-20 20:52:48 | 显示全部楼层
可以写一个,UEFI GRUB2  PXE引导 的事例吗?

点评

@江南一根葱  详情 回复 发表于 2019-11-20 21:27
回复

使用道具 举报

发表于 2019-11-20 21:01:49 | 显示全部楼层
本帖最后由 wuwuzz 于 2019-11-20 21:03 编辑

启动U盘上的固定wtg.vhd成功。

红毛说的没错,LZ最近功劳很大,要升仙
封神了。

下一步,需要有人写识别虚拟盘的win驱动,
以充分发挥MAP的作用。



回复

使用道具 举报

发表于 2019-11-20 21:04:37 来自手机 | 显示全部楼层
某些绕过安全打包的grub2版本为2.02,楼主的grub2为2.05版,且某些模块还是特制的,请问如何兼容?如果出现某mod已加载的提示,该如何处理?

点评

没看我的帖子? http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416924  详情 回复 发表于 2019-11-20 21:21
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-8-7 23:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表