无忧启动论坛

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

[原创] NTBOOT & wimboot for UEFI GRUB2

    [复制链接]
31#
 楼主| 发表于 2020-7-4 22:57:27 | 显示全部楼层
青青草 发表于 2020-7-4 22:30
在 Legacy BIOS 下与在 UEFI  BIOS 下的写法一样吗?

完全一样,只是uefi用bootmgfw.efi,bios用bootmgr.exe
回复

使用道具 举报

32#
 楼主| 发表于 2020-7-5 08:18:44 | 显示全部楼层
hilsonma 发表于 2020-7-5 07:28
bios ntboot 启动vhd失败: (uefi 启动成功)

http://reboot.pro/topic/20695-nt ... 0000bb/#entry194966
用这个 bootmgr.exe
bootmgr.tar.gz (349.69 KB, 下载次数: 33)
不过 BIOS 下的兼容性也不好,因为我的汇编水平不行。
还是建议用 grub4dos。
建议启动pe默认 testmode=no

好。
wimboot @:bootmgr.exe:$prefix/run/ms/bootmgr.exe @:boot.wim:/diy/pe.wim

其实可以直接
wimboot @:bootmgfw.efi:$prefix/run/ms/bootmgr.exe ...
BIOS 启动的时候会自动把 bootmgfw.efi 当成 bootmgr.exe,这样方便写菜单。

点评

使用该bootmgr.exe+ntboot成功引导vhdx 旧台式电脑,bios+mbr,有三块硬盘,其中ssd检测出问题,上面有引导分区和系统分区,担心突然坏掉,就在第一块机械硬盘上做了一个备份引导,并用vhdx做了一个备份系统 折腾  详情 回复 发表于 2022-10-13 22:36
还是失败,只是提示由: Status: 0xc00000bb 变成: Status: 0xc0000102  详情 回复 发表于 2020-7-5 08:32
回复

使用道具 举报

33#
 楼主| 发表于 2020-7-5 08:36:26 | 显示全部楼层
hilsonma 发表于 2020-7-5 07:58
建议启动pe默认 testmode=no
这样无需设置此参数也不会出现测试模式水印
bcd默认设置本来也是默认 test ...

就我所知,启动pe只需修改以下属性,其他保持默认即可:
description
device
osdevice
systemroot
detecthal
winpe
nointegritychecks
ramdisksdidevice
ramdisksdipath

device 和 os device 是wimboot/ntboot内部BCD解析器处理的时候自动填的。
systemroot 这个属性,正常人不会改。
detecthal 和 winpe,bootice 默认开启。winpe 不开就进不去。
nointegritychecks,这个必须开,我没提供选项。
novga 和 novesa,是给 win7 uefi 启动用的。
pae,是给 32 位 Windows 用的。
nx,是给一些 VHD (RamOS) 和开发者用的。
timeout,是我自己用来方便调试的,在 bcd 菜单界面按 F10 可以编辑启动参数。
还是失败,只是提示由:
Status: 0xc00000bb
变成:
Status: 0xc0000102

没见过这个错误,有图吗?

点评

建议timeout默认0,默认不显示bcd菜单,需要时才显示。  详情 回复 发表于 2020-7-10 07:21
[attachimg]460936[/attachimg]  详情 回复 发表于 2020-7-5 08:47
回复

使用道具 举报

34#
 楼主| 发表于 2020-7-5 09:05:13 | 显示全部楼层

那我还真不知道怎么办了。BIOS就这样吧,反正也没几个人用。
回复

使用道具 举报

35#
 楼主| 发表于 2020-7-8 14:17:02 | 显示全部楼层
adef 发表于 2020-7-8 12:25
从https://github.com/a1ive/grub/commit/de2bb17cd61c31f5a459b6242a8511bfd599d0b9开始,terminal_output ...

是不是输出到其他显示器/端口上了?
执行 terminal_output console,再执行 terminal_output gfxterm 呢?

点评

terminal_output gfxterm 前面加一句 terminal_output console 还是黑屏。 一个U盘上的配置文件改为 UTF-8 BOM 后,确实能看到菜单了,但是另一个U盘如法炮制却仍然黑屏。现在还是改为以前的 UTF-8 NO BOM 了,反  详情 回复 发表于 2020-7-8 18:51
回复

使用道具 举报

36#
 楼主| 发表于 2020-7-8 18:29:09 | 显示全部楼层
ksafei 发表于 2020-7-8 12:54
把配置文件编码改为UTF-8 BOM试下

GRUB2 不支持 UTF-8 BOM。

点评

哈哈,我的电脑不改UTF-8 BOM就黑屏,实属无奈 不过,刚试了最新版用UTF-8现在显示正常了  详情 回复 发表于 2020-7-8 21:44
回复

使用道具 举报

37#
 楼主| 发表于 2020-7-8 20:58:26 | 显示全部楼层
adef 发表于 2020-7-8 18:51
terminal_output gfxterm 前面加一句 terminal_output console 还是黑屏。
一个U盘上的配置文件改为 UT ...

我已经改回原来的语句了
https://github.com/a1ive/grub/co ... 9149a877a013823217a
总感觉黑屏可能是因为切换显示模式的时候需要输出点什么东西
回复

使用道具 举报

38#
 楼主| 发表于 2020-7-10 08:15:00 | 显示全部楼层
hilsonma 发表于 2020-7-10 07:21
建议timeout默认0,默认不显示bcd菜单,需要时才显示。

timeout 改成 0 有时候好像有问题,会直接停在 bcd 菜单上

点评

有没有试过 displaybootmenu 0  详情 回复 发表于 2020-7-24 17:13
回复

使用道具 举报

39#
 楼主| 发表于 2020-7-11 13:47:53 | 显示全部楼层
青青草 发表于 2020-7-11 13:43
ntboot可以启动指定的WIM卷号吗?

wimboot可以,ntboot不行

点评

谢谢!  详情 回复 发表于 2020-7-11 16:24
回复

使用道具 举报

40#
 楼主| 发表于 2020-7-14 08:49:17 | 显示全部楼层
本帖最后由 wintoflash 于 2020-7-14 08:51 编辑
青青草 发表于 2020-7-14 08:11
请教大神:
grub2能否判断 WIM 内部系统是 64 位还是32位?

目前是根据 wim 内部 \Windows\System32\Boot\winload.exe 判断的,不知道是否准确。
  1. wimtools --is64 /wim/wepe.wim; echo $?
复制代码

示例
https://github.com/a1ive/grub2-f ... s/iso/buildpe.sh#L4
wimtools 详细用法见
https://a1ive.github.io/grub2_cmd_zh.html

点评

学习了。 反馈: if wimtools --is64 --index=1 "${filename_this}";then 成功! if wimtools --exist --is64 --index=1 "${filename_this}";then 则失败。  详情 回复 发表于 2020-7-14 15:52
回复

使用道具 举报

41#
 楼主| 发表于 2020-7-14 17:11:01 | 显示全部楼层
青青草 发表于 2020-7-14 15:52
学习了。
反馈:
if wimtools --is64 --index=1 "${filename_this}";then
if wimtools --exist --is64 --index=1 "${filename_this}";then   则失败。

你这个用法莫名其妙,完全不正确。
--exist 是判断 WIM 内部是否存在某文件的,比如
wimtools --exist /wim/boot.wim \\Windows\\System32\\abcd.exe

点评

请教一下, if wimtools --is64 --index=1 "${filename_this}";then 红色字的地方可以用变量么?  详情 回复 发表于 2020-7-17 18:45
--exist, -e 检测文件是否存在 我以为是检测指定的WIM卷号是否存在。理解错了! 谢谢!  详情 回复 发表于 2020-7-14 17:18
回复

使用道具 举报

42#
 楼主| 发表于 2020-7-14 18:01:50 | 显示全部楼层
青青草 发表于 2020-7-14 17:18
--exist, -e 检测文件是否存在
我以为是检测指定的WIM卷号是否存在。理解错了!
谢谢!

检测指定的WIM卷号是否存在

如果需要这个功能的人很多,我可以加上这个功能。

点评

建议增加的功能: 1、读取WIM中的总卷数; 2、判断指定的WIM卷号是否存在;  详情 回复 发表于 2020-7-16 19:37
如果能加上这个功能,哪是再好不过了! 谢谢!  详情 回复 发表于 2020-7-14 18:32
回复

使用道具 举报

43#
 楼主| 发表于 2020-7-16 20:19:02 | 显示全部楼层
青青草 发表于 2020-7-16 19:37
建议增加的功能:
      1、读取WIM中的总卷数;
      2、判断指定的WIM卷号是否存在;

功能2是功能1的子集,没必要存在。

点评

的确,功能2与功能1重复。如果可以, 1、读取WIM中的总卷数; 2、读取卷号对应的卷名称。  详情 回复 发表于 2020-7-16 22:22
回复

使用道具 举报

44#
 楼主| 发表于 2020-7-16 20:58:22 | 显示全部楼层
更新了一下 wimboot/NTBOOT 的使用说明,顺便添加了原理介绍。
如果有朋友对 BCD/注册表感性趣,可以参考以下文章:
注册表文件结构解析 https://github.com/libyal/libreg ... 0Registry%20File%20(REGF)%20format.asciidoc
BCD 元素文档 https://www.geoffchappell.com/notes/windows/boot/bcd/elements.htm
NTBOOT 原理 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=417518
我参考 quibble 修改的注册表解析代码 https://github.com/a1ive/grub/blob/master/grub-core/map/lib/reg.c
如果对 boot.sdi 感性趣,可以参考以下文章:
SDI 结构解析 https://skolk.livejournal.com/1320.html
boot.sdi 制作方法 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=421193
回复

使用道具 举报

45#
 楼主| 发表于 2020-7-17 20:20:47 | 显示全部楼层
更新
1. 支持 XPRESS 压缩的 WIM。
2. wimtools 添加 --boot_index 和 --image_count 参数。
获取 wim 的总卷数:
wimtools --image_count=aaa (loop)/sources/install.wim; echo $aaa
获取 wim 可启动卷的卷号:
wimtools --boot_index=aaa (loop)/sources/boot.wim; echo $aaa

点评

获取 wim 可启动卷的卷号: wimtools --boot_index=aaa (loop)/sources/boot.wim; echo $aaa 假如wim中可启动的有三个卷,那么,获取的卷号是?  详情 回复 发表于 2020-7-18 09:15
回复

使用道具 举报

46#
 楼主| 发表于 2020-7-18 10:14:06 | 显示全部楼层
青青草 发表于 2020-7-18 09:15
获取 wim 可启动卷的卷号:
wimtools --boot_index=bbb (loop)/sources/boot.wim;

boot_index 是你用 bootmgfw.efi 启动时默认启动的卷号,这种可启动卷当然只能有一个。

点评

假如wim中可启动的有三个卷,如何用循环语句读取其卷号?  详情 回复 发表于 2020-7-18 10:50
回复

使用道具 举报

47#
 楼主| 发表于 2020-7-18 11:07:42 | 显示全部楼层
本帖最后由 wintoflash 于 2020-7-18 11:09 编辑
青青草 发表于 2020-7-18 10:50
假如wim中可启动的有{aaa}个卷,如何用循环语句读取其卷号?目的是通过循环语句分别显示{aaa}个菜单,启 ...

你说的 "可启动" 跟我说的 "可启动" 不是一码事。wimboot 可以启动任意卷,是不是可启动都没关系,只要卷里面不缺文件。
卷号是从1开始到总卷数的连续自然数,你每次加 1 就行了,不存在所谓 "读取" 的问题。
至于菜单怎么写,那你自己研究。论坛里有很多类似的例子。

点评

再请教个问题: wimboot --index=1 @:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.wim:"${filename_this}" 可以启动。 wimboot --index="${bbb}" @:bootmgfw.efi:(memdisk)/boot/grub  详情 回复 发表于 2020-7-18 11:53
已经解决了!谢谢!  详情 回复 发表于 2020-7-18 11:11
回复

使用道具 举报

48#
 楼主| 发表于 2020-7-18 12:01:01 | 显示全部楼层
青青草 发表于 2020-7-18 11:53
再请教个问题:
       wimboot --index=1  @:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.w ...

你这明明是启动的第三个卷

点评

我的菜单: menuentry "[${sequence}] 启动 ${name}卷${bbb}(${device})" "${device}" "${filename}" --unrestricted --hotkey="${sequence}"{  详情 回复 发表于 2020-7-18 12:11
回复

使用道具 举报

49#
 楼主| 发表于 2020-7-18 12:38:07 | 显示全部楼层
青青草 发表于 2020-7-18 12:11
我的菜单:
menuentry "[${sequence}] 启动 ${name}卷${bbb}(${device})" "${device}" "${filename}" - ...

你肯定在下面改变变量的值了。变量要通过menuentry的参数传递进去

点评

如果能读取卷号对应的卷名称,就完美了!  详情 回复 发表于 2020-7-18 13:09
晕!犯了这么低级的错误。唉... ... 谢谢!  详情 回复 发表于 2020-7-18 12:57
回复

使用道具 举报

50#
 楼主| 发表于 2020-7-18 13:25:23 | 显示全部楼层
青青草 发表于 2020-7-18 13:09
如果能读取卷号对应的卷名称,就完美了!

不考虑添加这个功能。没有实际意义。

点评

全自动菜单用到。 如 wimboot --index="${bbb}" 对应的名称为:"${bbb_name}" 菜单条:启动 "${bbb_name}"  详情 回复 发表于 2020-7-18 13:34
回复

使用道具 举报

51#
 楼主| 发表于 2020-7-18 18:22:24 | 显示全部楼层
adef 发表于 2020-7-18 17:36
从https://github.com/a1ive/grub/commit/5936f5f47f3cfcaf9427c44e3ed43a9ffc0575fd开始,UEFI 下map img ...

已修复
https://github.com/a1ive/grub/co ... 87970d86287c710d345
这个镜像没有分区表,应该属于 "软盘" 范畴吧。

点评

img 文件是用 diskgenius 生成的“分区映像”。[attachimg]461719[/attachimg]  详情 回复 发表于 2020-7-18 20:28
回复

使用道具 举报

52#
 楼主| 发表于 2020-7-22 20:33:14 | 显示全部楼层
青青草 发表于 2020-7-22 17:36
wimboot 方式可以虚拟修改 WIM 内容,向其中插入文件而不用改变实际文件内容。wimboot 会将除了 bcd, boot. ...
这样书写,似乎不可以。

证据/理由?

点评

不好意思,是我弄错了。  详情 回复 发表于 2020-7-23 11:59
回复

使用道具 举报

53#
 楼主| 发表于 2020-7-24 18:09:47 | 显示全部楼层
hilsonma 发表于 2020-7-24 17:13
有没有试过 displaybootmenu 0

不考虑。
这样不方便调试,而且容易出现图像显示方面的问题。
回复

使用道具 举报

54#
 楼主| 发表于 2020-8-2 08:44:50 | 显示全部楼层
枯井在地 发表于 2020-8-1 10:51
光盘ISO中运行map winboot ntboot都是提示error:symbol 'grub_strpbrk' not found,看不懂是什么意思:dizzy ...

你是怎么生成grub2启动文件的
回复

使用道具 举报

55#
 楼主| 发表于 2020-8-2 13:54:51 | 显示全部楼层
枯井在地 发表于 2020-8-2 09:27
什么都没改,直接生成替换的

仔细讲讲。
你用了不该用的内核或者模块,要么就实际启动的是其他地方的grub。
回复

使用道具 举报

56#
 楼主| 发表于 2020-8-6 17:24:57 | 显示全部楼层
枯井在地 发表于 2020-8-2 19:38
应该是我走了弯路,现在稍微有点明白。
再请教下,原本支持uefi和legacy启动的iso文件,我提取和编辑了u ...

mkisofs/oscdimg
回复

使用道具 举报

57#
 楼主| 发表于 2020-8-9 19:12:26 | 显示全部楼层
本帖最后由 wintoflash 于 2020-8-9 19:13 编辑
青青草 发表于 2020-8-9 18:50
再请教二个问题:
      对于legacy BIOS启动,
           1、set lang=en_US;

要讲逻辑。我又不能顺着网线去查看你的电脑硬盘,怎么知道你的wimboot.xz里面都有什么?从哪弄来的?

点评

wimboot.xz取自grubfm.iso/fm.loop/fm/boot/grubfm/wimboot.xz  详情 回复 发表于 2020-8-9 19:36
回复

使用道具 举报

58#
 楼主| 发表于 2020-8-9 19:53:29 | 显示全部楼层
青青草 发表于 2020-8-9 19:36
wimboot.xz取自你的grubfm.iso/fm.loop/fm/boot/grubfm/wimboot.xz

问题一:你研究一下wimboot.xz里面的文件,自然就懂了。
问题二:似乎是BIOS的问题。你在wimboot命令上加个--pause参数,在第一次暂停的地方截个图看看。

点评

加上--pause参数,在第一次暂停的地方截图如下:  详情 回复 发表于 2020-8-9 22:11
回复

使用道具 举报

59#
 楼主| 发表于 2020-11-19 13:53:43 | 显示全部楼层
青青草 发表于 2020-11-19 12:49
今天得空,下载了新版grub2,定制后UEFI启动直接进入了命令行界面,上一版也是。再上一版则正常(定制没变 ...

要自己找原因。
回复

使用道具 举报

60#
 楼主| 发表于 2020-11-22 09:29:19 | 显示全部楼层
hilsonma 发表于 2020-11-22 08:30
之前没有注意ntboot还添加了启动windows系统的功能。
试了一下,确实不错,自动配置bcd,省了配置bcd这一 ...

(1)grub2是否使用的是图形模式?如果是,切换到文本模式(terminal_output console)试试。
(2)ntboot 有没有加 --gui 参数?如果有,去掉,如果没有,加上,试一下。
如果都不行,那我也没办法了。


点评

grub2是使用图形模式。ntboot 加不加 --gui 都一样 ntboot 之前加 terminal_output console 切换到文本模式,然后ntboot,有没有 --gui 也都是花屏。 看来ntboot 启动windows系统这一功能的兼容性还不够 要普遍  详情 回复 发表于 2020-11-22 10:30
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-17 19:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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