2011npwjm 发表于 2020-7-14 08:35:52

谢谢楼主的分享

wintoflash 发表于 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 判断的,不知道是否准确。
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

青青草 发表于 2020-7-14 15:52:17

wintoflash 发表于 2020-7-14 08:49
目前是根据 wim 内部 \Windows\System32\Boot\winload.exe 判断的,不知道是否准确。

示例


学习了。
反馈:
if wimtools --is64 --index=1 "${filename_this}";then
   成功!
if wimtools --exist --is64 --index=1 "${filename_this}";then   则失败。

wintoflash 发表于 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

青青草 发表于 2020-7-14 17:18:35

wintoflash 发表于 2020-7-14 17:11
你这个用法莫名其妙,完全不正确。
--exist 是判断 WIM 内部是否存在某文件的,比如
wimtools --exis ...

--exist, -e 检测文件是否存在
我以为是检测指定的WIM卷号是否存在。理解错了!
谢谢!

wintoflash 发表于 2020-7-14 18:01:50

青青草 发表于 2020-7-14 17:18
--exist, -e 检测文件是否存在
我以为是检测指定的WIM卷号是否存在。理解错了!
谢谢!


检测指定的WIM卷号是否存在
如果需要这个功能的人很多,我可以加上这个功能。

青青草 发表于 2020-7-14 18:32:16

wintoflash 发表于 2020-7-14 18:01
如果需要这个功能的人很多,我可以加上这个功能。

如果能加上这个功能,哪是再好不过了!
谢谢!

创新科技2015 发表于 2020-7-16 07:37:56

很给力!

青青草 发表于 2020-7-16 19:37:32

wintoflash 发表于 2020-7-14 18:01
如果需要这个功能的人很多,我可以加上这个功能。

建议增加的功能:
      1、读取WIM中的总卷数;
      2、判断指定的WIM卷号是否存在;

wintoflash 发表于 2020-7-16 20:19:02

青青草 发表于 2020-7-16 19:37
建议增加的功能:
      1、读取WIM中的总卷数;
      2、判断指定的WIM卷号是否存在;

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

wintoflash 发表于 2020-7-16 20:58:22

更新了一下 wimboot/NTBOOT 的使用说明,顺便添加了原理介绍。
如果有朋友对 BCD/注册表感性趣,可以参考以下文章:
注册表文件结构解析 https://github.com/libyal/libregf/blob/master/documentation/Windows%20NT%20Registry%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

青青草 发表于 2020-7-16 22:22:36

wintoflash 发表于 2020-7-16 20:19
功能2是功能1的子集,没必要存在。

的确,功能2与功能1重复。如果可以,
      1、读取WIM中的总卷数;
      2、读取卷号对应的卷名称。

青青草 发表于 2020-7-17 18:45:27

wintoflash 发表于 2020-7-14 17:11
你这个用法莫名其妙,完全不正确。
--exist 是判断 WIM 内部是否存在某文件的,比如
wimtools --exis ...

请教一下,
if wimtools --is64 --index=1 "${filename_this}";then
红色字的地方可以用变量么?

wintoflash 发表于 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

xgh8448 发表于 2020-7-18 09:14:56

支持一下,谢谢分享

青青草 发表于 2020-7-18 09:15:59

本帖最后由 青青草 于 2020-7-18 10:48 编辑

wintoflash 发表于 2020-7-17 20:20
更新
1. 支持 XPRESS 压缩的 WIM。
2. wimtools 添加 --boot_index 和 --image_count 参数。

获取 wim 可启动卷的卷号:
wimtools --boot_index=bbb (loop)/sources/boot.wim;

1、假如wim中可启动的有三个卷,那么,获取的卷号是?
    我这里,
    wimtools --image_count=aaa (loop)/sources/install.wim;
            $aaa显示3
    wimtools --boot_index=bbb (loop)/sources/boot.wim;
             $bbb显示1
2、假如wim中可启动的有三个卷,如何用循环语句读取其卷号?

谢谢!

wintoflash 发表于 2020-7-18 10:14:06

青青草 发表于 2020-7-18 09:15
获取 wim 可启动卷的卷号:
wimtools --boot_index=bbb (loop)/sources/boot.wim;



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

青青草 发表于 2020-7-18 10:50:06

本帖最后由 青青草 于 2020-7-18 10:54 编辑

wintoflash 发表于 2020-7-18 10:14
boot_index 是你用 bootmgfw.efi 启动时默认启动的卷号,这种可启动卷当然只能有一个。
假如wim中可启动的有{aaa}个卷,如何用循环语句读取其卷号?目的是通过循环语句分别显示{aaa}个菜单,启动各个卷

wintoflash 发表于 2020-7-18 11:07:42

本帖最后由 wintoflash 于 2020-7-18 11:09 编辑

青青草 发表于 2020-7-18 10:50
假如wim中可启动的有{aaa}个卷,如何用循环语句读取其卷号?目的是通过循环语句分别显示{aaa}个菜单,启 ...
你说的 "可启动" 跟我说的 "可启动" 不是一码事。wimboot 可以启动任意卷,是不是可启动都没关系,只要卷里面不缺文件。
卷号是从1开始到总卷数的连续自然数,你每次加 1 就行了,不存在所谓 "读取" 的问题。
至于菜单怎么写,那你自己研究。论坛里有很多类似的例子。

青青草 发表于 2020-7-18 11:11:32

wintoflash 发表于 2020-7-18 11:07
你说的 "可启动" 跟我说的 "可启动" 不是一码事。wimboot 可以启动任意卷,是不是可启动都没关系,只要卷 ...

已经解决了!谢谢!

青青草 发表于 2020-7-18 11:53:48

wintoflash 发表于 2020-7-18 11:07
你说的 "可启动" 跟我说的 "可启动" 不是一码事。wimboot 可以启动任意卷,是不是可启动都没关系,只要卷 ...

再请教个问题:
       wimboot --index=1@:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.wim:"${filename_this}"
      可以启动。
wimboot --index="${bbb}"@:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.wim:"${filename_this}"
       无法启动。【${bbb}值为1】
如图。

wintoflash 发表于 2020-7-18 12:01:01

青青草 发表于 2020-7-18 11:53
再请教个问题:
       wimboot --index=1@:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.w ...

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

青青草 发表于 2020-7-18 12:11:31

本帖最后由 青青草 于 2020-7-18 12:16 编辑

wintoflash 发表于 2020-7-18 12:01
你这明明是启动的第三个卷
我的菜单:
menuentry "[${sequence}] 启动 ${name}卷${bbb}(${device})" "${device}" "${filename}" --unrestricted --hotkey="${sequence}"{      
                                     set root="$2";
                                     set filename_this="$3"                                                                  
                                    wimboot --index="${bbb}"@:bootmgfw.efi:(memdisk)/boot/grub/bootmgfw.efi @:boot.wim:"${filename_this}"
         }

问题出在哪?
谢谢!

wintoflash 发表于 2020-7-18 12:38:07

青青草 发表于 2020-7-18 12:11
我的菜单:
menuentry "[${sequence}] 启动 ${name}卷${bbb}(${device})" "${device}" "${filename}" - ...
你肯定在下面改变变量的值了。变量要通过menuentry的参数传递进去

青青草 发表于 2020-7-18 12:57:04

wintoflash 发表于 2020-7-18 12:38
你肯定在下面改变变量的值了。变量要通过menuentry的参数传递进去

晕!犯了这么低级的错误。唉... ...
谢谢!

青青草 发表于 2020-7-18 13:09:57

wintoflash 发表于 2020-7-18 12:38
你肯定在下面改变变量的值了。变量要通过menuentry的参数传递进去

如果能读取卷号对应的卷名称,就完美了!

wintoflash 发表于 2020-7-18 13:25:23

青青草 发表于 2020-7-18 13:09
如果能读取卷号对应的卷名称,就完美了!

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

青青草 发表于 2020-7-18 13:34:22

本帖最后由 青青草 于 2020-7-18 13:37 编辑

wintoflash 发表于 2020-7-18 13:25
不考虑添加这个功能。没有实际意义。
全自动菜单用到。
如 wimboot --index="${bbb}"对应的名称为:"${bbb_name}"
菜单条:启动 "${bbb_name}"
这样,通用性就更强了!



adef 发表于 2020-7-18 17:36:18

从https://github.com/a1ive/grub/commit/5936f5f47f3cfcaf9427c44e3ed43a9ffc0575fd开始,UEFI 下map img貌似没反应了。

menuentry "test" {
search -f -s /x.img
map -t hd /x.img
}

wintoflash 发表于 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/commit/837cb3e452a644819048687970d86287c710d345
这个镜像没有分区表,应该属于 "软盘" 范畴吧。

页: 1 2 3 4 [5] 6 7 8 9 10 11
查看完整版本: NTBOOT & wimboot for UEFI GRUB2