无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 129459|回复: 328
打印 上一主题 下一主题

[原创] NTBOOT & wimboot for UEFI GRUB2

    [复制链接]
跳转到指定楼层
#
发表于 2019-11-20 17:40:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wintoflash 于 2021-3-2 19:10 编辑

本项目已停止开发,不再维护。
----------------------------

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. --sos=yes|no 启用 SOS 模式。
  21. --novesa=yes|no 禁用 VESA BIOS 调用。
  22. --novga=yes|no 禁用 VGA 模式。
  23. --loadoptions=XXX 指定 NT 内核加载参数。
  24. --winload=\\WIN32_PATH 指定 winload 路径。
  25. --sysroot=\\WIN32_PATH 指定系统根目录。
复制代码

示例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. --sos=yes|no 启用 SOS 模式。
  21. --novesa=yes|no 禁用 VESA BIOS 调用。
  22. --novga=yes|no 禁用 VGA 模式。
  23. --loadoptions=XXX 指定 NT 内核加载参数。
  24. --winload=\\WIN32_PATH 指定 winload 路径。
  25. --sysroot=\\WIN32_PATH 指定系统根目录。
复制代码

示例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
复制代码


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


下载
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

评分

参与人数 21无忧币 +108 收起 理由
liangzr1976 + 5 很给力!
anythingsky + 5 赞一个!
wuxin9712 + 5
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 赞一个!

查看全部评分

304#
发表于 2024-4-8 17:12:24 | 只看该作者

这一段没太看懂,能详细些吗?
回复

使用道具 举报

303#
发表于 2024-4-7 08:16:26 | 只看该作者
感谢分享,虽然没有看懂啥意思
回复

使用道具 举报

302#
发表于 2024-4-7 07:54:40 | 只看该作者
6666666
回复

使用道具 举报

301#
发表于 2024-2-22 13:18:10 | 只看该作者
了解一下
回复

使用道具 举报

300#
发表于 2024-2-9 21:15:26 | 只看该作者
感谢楼主分享
回复

使用道具 举报

299#
发表于 2023-10-15 09:19:31 | 只看该作者
多谢分享。多谢分享。多谢分享。
回复

使用道具 举报

298#
发表于 2023-10-14 09:01:43 | 只看该作者
很好!!!
回复

使用道具 举报

297#
发表于 2023-10-14 08:04:23 | 只看该作者
支持大咖!支持!
回复

使用道具 举报

296#
发表于 2023-8-19 09:46:15 | 只看该作者
学习学习,大大交交 ntboot启动wiin完整命令怎么写
回复

使用道具 举报

295#
发表于 2023-7-15 15:34:26 | 只看该作者

LZ最近移植的功能多,要升仙封神了
回复

使用道具 举报

294#
发表于 2023-7-5 19:19:46 | 只看该作者
wintoflash 发表于 2023-7-5 18:43
那你应该向 Ventoy 开发者报告 bug。
这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用 ...

好的好的我知道了谢谢
回复

使用道具 举报

293#
 楼主| 发表于 2023-7-5 18:43:14 | 只看该作者
本帖最后由 wintoflash 于 2023-7-5 18:44 编辑
wlight_ 发表于 2023-7-5 15:53
额,我电脑上用ventoy启动vhd有问题,所以想用您的ntboot

那你应该向 Ventoy 开发者报告 bug。
这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用。
回复

使用道具 举报

292#
发表于 2023-7-5 15:53:58 | 只看该作者
wintoflash 发表于 2023-7-5 15:13
ventoy不是有插件可以启动whd,wim吗???

额,我电脑上用ventoy启动vhd有问题,所以想用您的ntboot

点评

那你应该向 Ventoy 开发者报告 bug。 这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用。  详情 回复 发表于 2023-7-5 18:43
回复

使用道具 举报

291#
 楼主| 发表于 2023-7-5 15:13:20 | 只看该作者
wlight_ 发表于 2023-7-5 12:27
请问有方法使得在ventoy中可以使用ntboot吗?没有就算了。

ventoy不是有插件可以启动whd,wim吗???
回复

使用道具 举报

290#
发表于 2023-7-5 12:27:26 | 只看该作者
本帖最后由 wlight_ 于 2023-7-5 12:50 编辑
wintoflash 发表于 2023-7-5 12:05
用法不正确。GRUB 模块 .mod 是不通用的。

请问有方法使得在ventoy中可以使用ntboot吗?没有就算了。

点评

ventoy不是有插件可以启动whd,wim吗???  详情 回复 发表于 2023-7-5 15:13
回复

使用道具 举报

289#
 楼主| 发表于 2023-7-5 12:05:11 | 只看该作者
wlight_ 发表于 2023-7-5 08:29
您好我只把存放mod的文件夹复制到了ventoy的引导盘,可是在insmod ntboot时,报错,说
symbol ‘grub_strp ...

用法不正确。GRUB 模块 .mod 是不通用的。
回复

使用道具 举报

288#
发表于 2023-7-5 08:29:55 | 只看该作者
您好我只把存放mod的文件夹复制到了ventoy的引导盘,可是在insmod ntboot时,报错,说
symbol ‘grub_strpbrk’not found
请问一下是什么问题呢

点评

用法不正确。GRUB 模块 .mod 是不通用的。  详情 回复 发表于 2023-7-5 12:05
回复

使用道具 举报

287#
 楼主| 发表于 2023-6-24 20:22:58 | 只看该作者
zczc8888 发表于 2023-6-24 19:03
loadfile [OPTIONS] FILE

​ 将文件加载到内存

在 command.lst 里面找一下命令在哪个模块里就行了。
你用它干啥呢。
回复

使用道具 举报

286#
发表于 2023-6-24 19:03:09 | 只看该作者
wintoflash 发表于 2023-6-24 16:53
什么东西? 没头没尾的。

loadfile [OPTIONS] FILE

​ 将文件加载到内存

    --skip=n, -k 跳过文件头部的 n 个字节
    --length=n, -l 指定读取的字节数
    --addr=ADDR, -a 指定加载到的内存地址
    --nodecompress, -n 不自动解压文件
    --set=VARIABLE, -s 将内存文件名保存到变量
就是这个命令 一直报错说找不到这个命令
回复

使用道具 举报

285#
 楼主| 发表于 2023-6-24 16:53:12 | 只看该作者
zczc8888 发表于 2023-6-24 16:09
这个loadfile 命令是哪个mod的功能,老是报不能发现命令

什么东西? 没头没尾的。
回复

使用道具 举报

284#
发表于 2023-6-24 16:09:06 | 只看该作者
这个loadfile 命令是哪个mod的功能,老是报不能发现命令
回复

使用道具 举报

283#
发表于 2023-4-4 01:47:29 | 只看该作者
请问  启动wim 是吧wim加载进内存再启动 还是?
回复

使用道具 举报

282#
发表于 2023-3-4 03:26:10 | 只看该作者
谢谢
回复

使用道具 举报

281#
发表于 2023-3-3 20:10:40 | 只看该作者
感谢楼主热心分享
回复

使用道具 举报

280#
发表于 2023-1-7 12:26:06 来自手机 | 只看该作者
666
回复

使用道具 举报

279#
发表于 2022-12-24 11:45:08 | 只看该作者
谢谢分享。
回复

使用道具 举报

278#
 楼主| 发表于 2022-12-24 09:16:46 | 只看该作者
青青草 发表于 2022-12-13 18:38
再请教一下:
      利用伪随机数随机显示动画主题:
rand --from=0 --to=2 aaa
其中-le好像只能用于整数比较。

没看懂
回复

使用道具 举报

277#
发表于 2022-12-13 18:38:32 | 只看该作者
本帖最后由 青青草 于 2022-12-13 23:23 编辑
wintoflash 发表于 2022-11-13 16:05
区间是左闭右开的,所以要取 [0,3)。
伪随机数是用CPU时钟做种子来生成的。

再请教一下:
      利用伪随机数随机显示动画主题:
rand --from=0 --to=2 aaa
if [ "aaa" -le "1" ]; then

    set theme=/themes/Mapleleaves/Themes.txt
else
    set theme=/themes/streetlamp/Themes.txt
fi;
     其中-le好像只能用于整数比较。于是,上面的写法可能有错。应如何书写呢?
谢谢!
回复

使用道具 举报

276#
发表于 2022-11-16 11:24:51 | 只看该作者
wintoflash 发表于 2022-11-13 16:10
这两行文字属于什么组件?如果是 label 组件的话,loadfont 加载字体后设置 font 属性就行了。

(字体 ...

字体在不同的pf2字体文件里面,可以用loadfont 加载多个pf2 字体文件嘛 然后在用label组件 指定用哪个字体?
回复

使用道具 举报

275#
发表于 2022-11-14 10:53:55 | 只看该作者
{:1_186:}
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-20 08:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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