无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: hilsonma
打印 上一主题 下一主题

[分享] grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)

    [复制链接]
31#
 楼主| 发表于 2020-1-1 16:28:58 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 16:37 编辑
wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...

刚试了,bcd设置中文wim名,能正常启动。




回复

使用道具 举报

32#
发表于 2020-1-1 16:42:30 | 只看该作者
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

用的是wimboot
回复

使用道具 举报

33#
发表于 2020-1-1 16:45:23 | 只看该作者
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim
wimboot是用虚拟盘上的bcd,启动虚拟盘上的boot.wim
@:boot.wim:/xxx.wim,虚拟盘上的wim就是boot.wim
@:abcd.wim:/xxx.wim,虚拟盘上就是abcd.wim
grub2里面的vfat命令,可以帮助你理解。
回复

使用道具 举报

34#
 楼主| 发表于 2020-1-1 17:11:33 | 只看该作者
wintoflash 发表于 2020-1-1 16:45
wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim

稍后我去了解vfat。

看你的解释,我明白了:
wimboot是先将wim复制到虚拟盘,改名为虚拟盘bcd指定的文件名
ntboot是按实际文件名修改虚拟盘的bcd
回复

使用道具 举报

35#
发表于 2020-1-1 17:31:58 | 只看该作者
run是用的早期的wimboot,没有注入文件的功能
我一直在论坛上问怎么替换成新的版本。。。。结果没人告诉我
回复

使用道具 举报

36#
发表于 2020-1-1 17:49:59 | 只看该作者
hilsonma 发表于 2020-1-1 17:11
稍后我去了解vfat。

看你的解释,我明白了:

wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。
回复

使用道具 举报

37#
 楼主| 发表于 2020-1-1 18:13:25 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 18:26 编辑
wintoflash 发表于 2020-1-1 17:49
wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。

那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动模板,使用的时候复制实际的wim文件到虚拟盘改名符合模板然后启动。

而ntboot则是在虚拟盘放bootmgr+bcd+sdi, 使用的时候修改虚拟盘的bcd以符合要启动的wim路径然后启动。
不知道我这样的理解是否对。
回复

使用道具 举报

38#
发表于 2020-1-1 18:33:52 | 只看该作者
hilsonma 发表于 2020-1-1 18:13
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动 ...
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动模板,使用的时候复制实际的wim文件到虚拟盘改名符合模板然后启动。

不修改bcd。文件名不符直接启动失败。
而ntboot则是在虚拟盘放bootmgr+bcd+sdi, 使用的时候修改虚拟盘的bcd以符合要启动的wim路径然后启动。
不知道我这样的理解是否对。

这个是对的。

修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。
回复

使用道具 举报

39#
发表于 2020-1-1 18:57:30 | 只看该作者
本帖最后由 wintoflash 于 2020-1-1 20:04 编辑


试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无法预料的问题,不管了。




回复

使用道具 举报

40#
 楼主| 发表于 2020-1-1 19:43:24 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 20:59 编辑
不修改bcd。文件名不符直接启动失败。

把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。

修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。

自从我学会bcdedit后一直都是使用基于bcdedit脚本修改bcd
现在只发现使用bcdedit建立的bcd启动vhd不成功,而bcdboot建立的bcd能成功启动vhd. 这个问题还没有找到答案。其他我使用bcdedit建立的bcd都能成功引导。
就象我用你的vhd模块启动vhd没有成功过,而用ntboot却成功了,目前也没有找到答案。我不知道是不是我操作vhd镜像的问题。

我觉得你把bcd弄复杂了,我不懂分析文件结构,但据网上资料,bcd就是一个注册表文件,可以导入注册表编辑修改的。
有兴趣有时间的话可以看看这个http://www.mistyrebootfiles.alte ... /BCDEdit/index.html

可能wimboot中修改bcd不容易吧,这个我就不了解了。

你可以试试把我这个bcd放进虚拟盘根目录,只要bootmgfw.efi  boot.sdi  boot.wim都同在虚拟盘根目录,就能成功启动。
所以只要把wim文件复制进虚拟盘根目录改名为boot.wim就可以了。
这个bcd是uefi/bios通用的。

bcd.7z

1.16 KB, 下载次数: 30, 下载积分: 无忧币 -2

回复

使用道具 举报

41#
 楼主| 发表于 2020-1-1 19:47:40 | 只看该作者
本帖最后由 hilsonma 于 2020-1-1 19:55 编辑
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

试过了,这个可以成功启动中文文件名的wim镜像。谢谢。
先成功了再说,至于特殊情况,只要不造成实质损坏,可以慢慢改善,也可以置之不理。
好象不点有个观点是这样的:用户迁就软件,软件迁就硬件。当然,是指规范而言。因为要迁就不规范的东西实在是太难太难了。
回复

使用道具 举报

42#
发表于 2020-1-1 19:53:38 | 只看该作者
vhd模块不是用来挂载vhd的吗

点评

是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。 后来用ntboot就成功了。  详情 回复 发表于 2020-1-1 19:56
回复

使用道具 举报

43#
 楼主| 发表于 2020-1-1 19:56:51 | 只看该作者
江南一根葱 发表于 2020-1-1 19:53
vhd模块不是用来挂载vhd的吗

是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。
回复

使用道具 举报

44#
发表于 2020-1-1 20:04:41 | 只看该作者
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

貌似记得这模块就是挂载vhd查看文件用的。efi启vhd目前只有ntboot
bios下倒可以用vboot
回复

使用道具 举报

45#
发表于 2020-1-1 20:07:20 | 只看该作者
本帖最后由 wintoflash 于 2020-1-1 20:14 编辑
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。

所以,你可以用注册表编辑器打开bcd看一下,是不是一脸懵逼。
而且,就算是注册表,也不是那么好解析的。
目前Windows下,也都是要通过 regedit 或者 windows api 查看注册表的。
第三方的解析注册表软件存在,但是非常复杂。

目前 wimboot 里面只是有将.efi替换.exe的修改,是暴力实现的。

因为大多数人用的都是 Windows,别说 bootloader/操作系统开发了,就算是 Windows 程序开发,也接触的不多,会把很多东西看作想当然的。
在grub里面,就算是算长整数的除法取余,都可能需要汇编来实现。在C语言学习里面习以为常的 printf 都不存在。在显示屏上输出个小数都费劲。

回复

使用道具 举报

46#
发表于 2020-1-1 22:46:32 来自手机 | 只看该作者
wimiso
回复

使用道具 举报

47#
 楼主| 发表于 2020-1-2 10:14:03 | 只看该作者
本帖最后由 hilsonma 于 2020-1-2 10:26 编辑
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒;
ntboot比原来略慢,相差也不到1秒;
同版ntboot比wimboot快,相差2秒左右。
这是在我的电脑上用不同方式启动同一个wim,用手机秒表手工测量的结果,肯定有误差,但快慢对比应该是真实的。

按照你对wimboot和ntboot的描述,我觉得两者在虚拟盘文件参数方面应该是一样的,也就是wimboot没有提供修改虚拟盘文件名的必要,都是可选参数
-e FILE, --efi=FILE 外部efi文件,不指定就使用自带的
-s FILE, --sdi=FILE 外部sdi文件,不指定就使用自带的
虚拟盘文件名是固定的,就没有必要使用外部的bcd,直接自带的bcd
wimboot是启动复制到虚拟盘的wim,命名为虚拟盘固定的wim文件名即可,不需要改bcd
ntboot是启动外部的wim,需要ntboot内部修改虚拟盘的bcd以符合外部wim文件名
wimboot那一套参数@:NAME:FILE 可以简单化了。

sdi建议自带960k那个,bcd建议用我给的8k那个,bootmgr会自动选用winload.exe,bootmgfw.efi会自动选用winload.efi,没有必要在bcd中指定。
回复

使用道具 举报

48#
发表于 2020-1-2 10:47:07 | 只看该作者
本帖最后由 wintoflash 于 2020-1-2 10:53 编辑
hilsonma 发表于 2020-1-2 10:14
试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒;
ntboot比原来略慢,相差也不到1秒;
同版nt ...

1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。
2)wimboot 最主要的用途是修改wim,这个你没有用到,所以觉得可以改。我不会设计没用的东西,就连命令中的@,也是有用的,只不过我没有公开。
3)要给将来可能出现的改进留空间

回复

使用道具 举报

49#
 楼主| 发表于 2020-1-2 10:58:17 | 只看该作者
wintoflash 发表于 2020-1-2 10:47
1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。
2)wimboot 最主要的用途是修改wim,这个你 ...

明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果是没有的话建议usage里标示--efi 为必需参数,而不是可选参数。--sdi 参数同理。
回复

使用道具 举报

50#
发表于 2020-1-2 11:09:17 | 只看该作者
本帖最后由 wintoflash 于 2020-1-2 11:10 编辑
hilsonma 发表于 2020-1-2 10:58
明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果 ...

默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页grub2手册里面有写的。https://a1ive.github.io/grub2_zh.html
回复

使用道具 举报

51#
 楼主| 发表于 2020-1-2 11:34:02 | 只看该作者
本帖最后由 hilsonma 于 2020-1-2 11:55 编辑
wintoflash 发表于 2020-1-2 11:09
默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页gr ...

谢谢。是我发贴发糊涂了,原本知道是有默认外部路径的。脑子里直想着虚拟盘事情就试,试了就发贴,一下子就忘了。

中文手册越来越丰富,祝贺并感谢!
回复

使用道具 举报

52#
发表于 2020-1-2 11:57:37 | 只看该作者
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无 ...

想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/imgs/WePE_64_V2.0中文.iso"
这样子的了?
回复

使用道具 举报

53#
 楼主| 发表于 2020-1-2 12:36:41 | 只看该作者
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

我刚试了,直接
map /imgs/WePE_64_V2.0中文.iso
这样的中文iso是可以启动的,网启我现在没有条件没有试,你一试便知。
回复

使用道具 举报

54#
发表于 2020-1-2 13:04:30 | 只看该作者
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

这个跟网启的没有关系。
网启的是软件内部编码的问题,必须转。
回复

使用道具 举报

55#
发表于 2020-1-2 17:58:58 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-1-3 07:54 编辑
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

        g4d的run显示中文没问题的,要加载正确的字体,菜单要用utf-8有无BOM都可以,似乎还需要vbe模式,run --loadfont有个命令就是加载中文字体,加载之后不存在你说的无法正常显示的问题。      
回复

使用道具 举报

56#
发表于 2020-1-2 18:02:03 来自手机 | 只看该作者
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。



        BCD修改真的不容易,bcdedit很不可靠。不如g4d grub2这样子的文本菜单改起来方便。      
回复

使用道具 举报

57#
发表于 2020-1-9 09:44:18 | 只看该作者
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/a1ive/grub/issues/24)
所以 UEFI 下用 map 启动 VHD 最大的问题就是, 没有能用的 Windows 驱动。


回复

使用道具 举报

58#
发表于 2020-1-9 12:42:55 | 只看该作者
wintoflash 发表于 2020-1-9 09:44
这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/ ...

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365
不知这个是否有可以借鉴的地方
回复

使用道具 举报

59#
发表于 2020-1-9 13:35:27 | 只看该作者
pky317 发表于 2020-1-9 12:42
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365
不知这个是否有可以借鉴的地方

看源码,SvBus的原理也差不多。获取 GRUB4DOS map 出来的盘靠的是 int13h 相关的东西。
这种东西在 UEFI 下根本不存在。至于能不能模拟出来那就不好说了。如果能模拟出来的话,UEFI下都能模拟 BIOS 了。
回复

使用道具 举报

60#
发表于 2020-1-13 15:58:47 | 只看该作者
反馈一个小问题 dir时,分区根目录出现很多个带有$符号的文件,楼主能不屏蔽掉呢。

捕获.PNG (142.39 KB, 下载次数: 258)

捕获.PNG

捕获2.PNG (43.42 KB, 下载次数: 251)

捕获2.PNG

捕获3.PNG (16.36 KB, 下载次数: 217)

捕获3.PNG

点评

现在设定的是显示所有文件,所以这类隐藏文件也显示的 要屏蔽$开头的文件需要添加筛选功能 你可以使用notepad2修改rundir.cfg 在第12行 if test -d "$obj"; then 的前面加上这一句: if regexp '^\$.*' "$name";  详情 回复 发表于 2020-1-13 16:53
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 07:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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