无忧启动论坛

标题: grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso) [打印本页]

作者: hilsonma    时间: 2019-12-31 08:23
标题: grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)
本帖最后由 hilsonma 于 2020-1-26 16:23 编辑

run.7z (568.88 KB, 下载次数: 1290)
特别感谢wintoflash的指导。终于将此功能完善。

将附件里的run文件夹整个提取出来放到grub.cfg所在文件夹
再在grub.cfg 中加上这一句:
  1. source $prefix/run/run.cfg
复制代码

然后就可以在grub2中使用run命令了。
可以将目录列成自动菜单。
可以查找并引导efi、wim、vhd、vhdx、iso 和 cfg (grub2配置文件)。

需要以下模块支持:chain configfile echo map ntboot probe regexp search test

用法示例一:将各分区的目录 /pe 全部列成自动菜单
  1. run /pe
复制代码


用法示例二:查找并引导 /Windows/Boot/EFI/bootmgfw.efi
  1. run /Windows/Boot/EFI/bootmgfw.efi
复制代码


用法示例三:查找并启动 /pe.wim
  1. run /pe.wim
复制代码


用法示例四:查找并启动 /vhd/win81.vhdx
  1. run /vhd/win81.vhdx
复制代码


用法示例五:查找并测试 /pe/test.cfg
  1. run /pe/test.cfg
复制代码


也可参见我自用的grub2启动模板

文件说明:
run\run.cfg 函数文件
run\rundir.cfg 目录菜单文件
run\runseek.cfg 查找菜单文件
run\ms\bood.sdi 启动wim/vhd用的虚拟盘文件,如果启动多卷的wim有问题请换用3M那个boot.sdi
run\ms\bootmgfw.efi 启动wim/vhd用的引导文件

run.cfg 定义了5个命令:
run 查找启动
runx 启动
rundir 列目录菜单
runseek 列查找菜单
xntboot 使用指定efi和sdi执行ntboot
一般使用第一个命令就可以了,后面的命令是第一个命令引用的。

通过这样定义,windows相关的启动一个run就搞掂了。
linux相关的启动,可以将相关的参数存为一个cfg 文件,放到自动菜单目录。
如果linux做为常用的第二系统甚至是第一系统的,就直接将启动参数写到主菜单。
其他引导器的测试,可以将其引导文件放到自动菜单目录,或者将引导参数写到cfg文件再将cfg文件放到自动菜单目录
这样怎么折腾都是在自动菜单目录,不需要频繁改动EFI分区.
作者: 指南针    时间: 2019-12-31 08:49
这个可以有
作者: 江南一根葱    时间: 2019-12-31 09:31
这样好像应该只适合修改版grub2吧,  而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址,
这个run,我有个很变态的写法,我酝酿一下折腾折腾,绝对变态,绝对的,
作者: hilsonma    时间: 2019-12-31 09:59
江南一根葱 发表于 2019-12-31 09:31
这样好像应该只适合修改版grub2吧,  而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址 ...

当然只适合修改版grub2,只是三个cfg文件,功能都是基于wintoflash的相关模块支持。

拭目以待最伟的变态之作
作者: 江南一根葱    时间: 2019-12-31 11:19
hilsonma 发表于 2019-12-31 09:59
当然只适合修改版grub2,只是三个cfg文件,功能都是基于wintoflash的相关模块支持。

拭目以待最伟的变 ...

那不如打包成单efi啊,反正都启动了
想返回原菜单的话,你把里面的弄成返回你的菜单。

最近瞎忙都没折腾,
大概我就是会把菜单文件弄成可以用save_env来保存变量到自身

然后弄几个僵尸菜单,每种菜单对应一种启动方式,
菜单所有行前面弄个变量,变量值默认是#号,就是不出现菜单,
如果是iso格式的,那就把iso前面的变量由变量值#号变成空,iso相应的菜单就会显示了,就会启动了,

然后加密菜单,这样显得神秘
哈哈


作者: tdqk003    时间: 2019-12-31 13:24
请问大师 支持普通BIOS吗
作者: liaonf    时间: 2019-12-31 13:41
早就该出手了,Grub2是大势所趋啊
作者: sghihor    时间: 2019-12-31 13:46
江南一根葱 发表于 2019-12-31 11:19
那不如打包成单efi啊,反正都启动了,
想返回原菜单的话,你把里面的弄成返回你的菜单。

谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.
作者: hilsonma    时间: 2019-12-31 14:33
tdqk003 发表于 2019-12-31 13:24
请问大师 支持普通BIOS吗

道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动菜单应该是可以显示的。
作者: tdqk003    时间: 2019-12-31 15:05
hilsonma 发表于 2019-12-31 14:33
道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动 ...

大师啊  我试过了  不行了  少几个模块   一散就过  没有反映
作者: hilsonma    时间: 2019-12-31 15:19
tdqk003 发表于 2019-12-31 15:05
大师啊  我试过了  不行了  少几个模块   一散就过  没有反映

嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什么用
虽然可以修改成引用g4d的方式,但我认为没有那个必要。
bios下还是直接用g4d吧,我都是用g4d的。
作者: tdqk003    时间: 2019-12-31 15:30
hilsonma 发表于 2019-12-31 15:19
嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什 ...

非常感谢大师
作者: hilsonma    时间: 2019-12-31 16:16
本帖最后由 hilsonma 于 2019-12-31 16:21 编辑
江南一根葱 发表于 2019-12-31 11:19
那不如打包成单efi啊,反正都启动了,
想返回原菜单的话,你把里面的弄成返回你的菜单。

会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子,他用的bcd文件是分winload.exe和winload.efi的,其实不需要在bcd中指定winload的,bootmgfw.efi 和bootmgr会自动使用恰当的winload来引导的。wintoflash在贴子中说他不会更新了,项目中止了。你如果会改又能抽得出时间的话,修改一下这个模块,我就可以完全用这个ntboot来代替wimboot了。
作者: hilsonma    时间: 2019-12-31 16:56
本帖最后由 hilsonma 于 2019-12-31 18:01 编辑
sghihor 发表于 2019-12-31 13:46
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.

以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱提过grub2搜索文件慢,我觉得用我现在的方式在实机上操作还可以,不觉得慢。
作者: wintoflash    时间: 2019-12-31 17:41
hilsonma 发表于 2019-12-31 16:16
会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子 ...

为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。



作者: hilsonma    时间: 2019-12-31 18:09
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。

你的ntboot的贴子提到过实现的过程,我知道要转换路径,是不好做
wimboot的具体实现我不了解,不知道是怎么做到的,有没有参考的地方。在你看来应该是没有共通的,要不然你已经参考了,我只是想弄个明白,或者希望有人能解决。
作者: hilsonma    时间: 2019-12-31 18:44
本帖最后由 hilsonma 于 2019-12-31 18:47 编辑
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。

刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码


作者: 20160618    时间: 2019-12-31 18:58
本帖最后由 20160618 于 2019-12-31 19:00 编辑
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

menu.lst 中要 中文字体

font /boot/grub/unifont.hex
加上看看,行不行

作者: hilsonma    时间: 2019-12-31 19:11
本帖最后由 hilsonma 于 2019-12-31 19:15 编辑
20160618 发表于 2019-12-31 18:58
menu.lst 中要 中文字体

font /boot/grub/unifont.hex

其实我在g4d中是用siso的,不需要另加中文字体,显示没有问题,只是siso中是可以用wimboot来实现启动pe的,所以我才用跟wimboot不同的run试给wintoflash看看有没有参考作用。

menu.lst 也是支持utf-8编码了的。



作者: wangziqiang    时间: 2019-12-31 19:11
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

确实需要字体,我记着以前用的时候有加字体回头我查一下看看我还有保存档没!
作者: 江南一根葱    时间: 2019-12-31 20:35
中文iso倒是常用,中文wim我倒是还没折腾过,估计用“乱码”加载就可以了吧
作者: 江南一根葱    时间: 2019-12-31 20:47
hilsonma 发表于 2019-12-31 16:56
以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱 也 提过grub2搜索文件慢,我觉 ...

看怎么搜索吧,我以前是全盘搜索,,只搜两层目录倒不是很慢,而且貌似grub2搜文件还有大小写问题,要搜索两遍,烦得很,
作者: shan    时间: 2020-1-1 10:00
万分感谢!终于有我需要的功能了,有时间再测试哈
作者: wdtx    时间: 2020-1-1 14:44
学习学习,谢谢大神分享。。。

作者: wintoflash    时间: 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!





作者: wintoflash    时间: 2020-1-1 15:28
wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!
  1. Windows操作系统内核中的字符表示为UTF-16小尾序,可以正确处理、显示以4字节存储的字符。但是Windows API实际上仅能正确处理UCS-2字符,即仅以2字节存储的,码位小于U+FFFF的Unicode字符。其根源是Microsoft C++语言把 wchar_t 数据类型定义为16比特的unsigned short,这就与一个 wchar_t 型变量对应一个宽字符、可以存储一个Unicode字符的规定相矛盾。
复制代码

作者: hilsonma    时间: 2020-1-1 15:38
wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!

不好意思,我没有试过ntboot,我试的是run。
我知道siso走的是wimboot,不知道run走的是wimboot还是ntboot,我看siso显示正常而run显示不正常以为走的是不一样的。
我是业余有兴趣边看边学的,有些做得不到位或表达不到位,让你费心了,请多多包涵。感谢你的努力。
作者: wintoflash    时间: 2020-1-1 15:47
hilsonma 发表于 2020-1-1 15:38
不好意思,我没有试过ntboot,我试的是run。
我知道siso走的是wimboot,不知道run走的是wimboot还是ntbo ...

能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转换成了gbk?
另外就是bootice编辑bcd,设置中文wim名,能不能正常启动?

作者: hilsonma    时间: 2020-1-1 16:00
本帖最后由 hilsonma 于 2020-1-1 16:09 编辑
wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...

run.7z (559.91 KB, 下载次数: 95)

刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下改bcd用中文文件名的wim,我疑惑的是你们的wimboot是怎样处理wim路径的,为什么ntboot不能参考。

作者: hilsonma    时间: 2020-1-1 16:28
本帖最后由 hilsonma 于 2020-1-1 16:37 编辑
wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...

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





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

稍后我试一下 ...

用的是wimboot
作者: wintoflash    时间: 2020-1-1 16:45
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命令,可以帮助你理解。

作者: hilsonma    时间: 2020-1-1 17:11
wintoflash 发表于 2020-1-1 16:45
wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim

稍后我去了解vfat。

看你的解释,我明白了:
wimboot是先将wim复制到虚拟盘,改名为虚拟盘bcd指定的文件名
ntboot是按实际文件名修改虚拟盘的bcd
作者: 江南一根葱    时间: 2020-1-1 17:31
run是用的早期的wimboot,没有注入文件的功能
我一直在论坛上问怎么替换成新的版本。。。。结果没人告诉我
作者: wintoflash    时间: 2020-1-1 17:49
hilsonma 发表于 2020-1-1 17:11
稍后我去了解vfat。

看你的解释,我明白了:

wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。
作者: hilsonma    时间: 2020-1-1 18:13
本帖最后由 hilsonma 于 2020-1-1 18:26 编辑
wintoflash 发表于 2020-1-1 17:49
wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。

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

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

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

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

这个是对的。

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

作者: wintoflash    时间: 2020-1-1 18:57
本帖最后由 wintoflash 于 2020-1-1 20:04 编辑


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

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





作者: hilsonma    时间: 2020-1-1 19:43
本帖最后由 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


作者: hilsonma    时间: 2020-1-1 19:47
本帖最后由 hilsonma 于 2020-1-1 19:55 编辑
wintoflash 发表于 2020-1-1 18:57
试试,utf-8的中文路径应该可以了。

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

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

作者: 江南一根葱    时间: 2020-1-1 19:53
vhd模块不是用来挂载vhd的吗
作者: hilsonma    时间: 2020-1-1 19:56
江南一根葱 发表于 2020-1-1 19:53
vhd模块不是用来挂载vhd的吗

是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。
作者: 江南一根葱    时间: 2020-1-1 20:04
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

貌似记得这模块就是挂载vhd查看文件用的。efi启vhd目前只有ntboot
bios下倒可以用vboot
作者: wintoflash    时间: 2020-1-1 20:07
本帖最后由 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 都不存在。在显示屏上输出个小数都费劲。


作者: 江南一根葱    时间: 2020-1-1 22:46
wimiso
作者: hilsonma    时间: 2020-1-2 10:14
本帖最后由 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中指定。

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

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


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

明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果是没有的话建议usage里标示--efi 为必需参数,而不是可选参数。--sdi 参数同理。
作者: wintoflash    时间: 2020-1-2 11:09
本帖最后由 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
作者: hilsonma    时间: 2020-1-2 11:34
本帖最后由 hilsonma 于 2020-1-2 11:55 编辑
wintoflash 发表于 2020-1-2 11:09
默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页gr ...

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

中文手册越来越丰富,祝贺并感谢!
作者: liuzhaoyzz    时间: 2020-1-2 11:57
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"
这样子的了?

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

我刚试了,直接
map /imgs/WePE_64_V2.0中文.iso
这样的中文iso是可以启动的,网启我现在没有条件没有试,你一试便知。
作者: wintoflash    时间: 2020-1-2 13:04
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

这个跟网启的没有关系。
网启的是软件内部编码的问题,必须转。
作者: liuzhaoyzz    时间: 2020-1-2 17:58
本帖最后由 liuzhaoyzz 于 2020-1-3 07:54 编辑
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

        g4d的run显示中文没问题的,要加载正确的字体,菜单要用utf-8有无BOM都可以,似乎还需要vbe模式,run --loadfont有个命令就是加载中文字体,加载之后不存在你说的无法正常显示的问题。      
作者: liuzhaoyzz    时间: 2020-1-2 18:02
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。



        BCD修改真的不容易,bcdedit很不可靠。不如g4d grub2这样子的文本菜单改起来方便。      
作者: wintoflash    时间: 2020-1-9 09:44
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

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



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

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

看源码,SvBus的原理也差不多。获取 GRUB4DOS map 出来的盘靠的是 int13h 相关的东西。
这种东西在 UEFI 下根本不存在。至于能不能模拟出来那就不好说了。如果能模拟出来的话,UEFI下都能模拟 BIOS 了。
作者: wangziqiang    时间: 2020-1-13 15:58
反馈一个小问题 dir时,分区根目录出现很多个带有$符号的文件,楼主能不屏蔽掉呢。

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

捕获.PNG

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

捕获2.PNG

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

捕获3.PNG

作者: hilsonma    时间: 2020-1-13 16:53
本帖最后由 hilsonma 于 2020-1-13 17:02 编辑
wangziqiang 发表于 2020-1-13 15:58
反馈一个小问题 dir时,分区根目录出现很多个带有$符号的文件,楼主能不屏蔽掉呢。

现在设定的是显示所有文件,所以这类隐藏文件也显示的
要屏蔽$开头的文件需要添加筛选功能
你可以使用notepad2修改rundir.cfg
在第12行 if test -d "$obj"; then 的前面插入一行,放上这一句:
if regexp '^\$.*' "$name";then continue;fi
这样跳过$开头的文件就可以了。

不过你现在使用的是wintoflash的run.efi,你需要修改他的源码然后重新编译,或者到他的贴子反映,看他是否为你修改。
作者: wangziqiang    时间: 2020-1-13 17:08
hilsonma 发表于 2020-1-13 16:53
现在设定的是显示所有文件,所以这类隐藏文件也显示的
要屏蔽$开头的文件需要添加筛选功能
你可以使用n ...

好的 谢谢指导,我试一下,另外能不能把 仿真和slic也加进去呢
作者: wangziqiang    时间: 2020-1-13 17:38
hilsonma 发表于 2020-1-13 16:53
现在设定的是显示所有文件,所以这类隐藏文件也显示的
要屏蔽$开头的文件需要添加筛选功能
你可以使用n ...

已解决,但是还有一个system文件,估计是分区中的System Volume Information文件夹,但不知怎么屏蔽。再有就是返回上一层时,总是回到根目录,还望再次指导

录制_2020_01_13_17_29_00_721.gif (240.12 KB, 下载次数: 227)

录制_2020_01_13_17_29_00_721.gif

作者: hilsonma    时间: 2020-1-13 19:00
wangziqiang 发表于 2020-1-13 17:08
好的 谢谢指导,我试一下,另外能不能把 仿真和slic也加进去呢

仿真是不是指map?
我的run程序已经使用map了,你看run.cfg中runx函数,其中的iso文件就是用map来仿真启动的。

slic是指查看oemid吧,这个你到grub2命令行输入相关语句或把语句写到某项菜单即可。当然,编译efi文件时要加上acpi模块。详见wintoflash的贴子
作者: wangziqiang    时间: 2020-1-13 19:09
hilsonma 发表于 2020-1-13 19:00
仿真是不是指map?
我的run程序已经使用map了,你看run.cfg中runx函数,其中的iso文件就是用map来仿真启 ...

返回上一层时,总是回到根目录,还望再次指导.图见63楼
作者: wintoflash    时间: 2020-1-13 19:39
wangziqiang 发表于 2020-1-13 19:09
返回上一层时,总是回到根目录,还望再次指导.图见63楼

菜单上写了,按ESC返回上一层。

作者: hilsonma    时间: 2020-1-13 20:19
本帖最后由 hilsonma 于 2020-1-13 20:32 编辑
wangziqiang 发表于 2020-1-13 19:09
返回上一层时,总是回到根目录,还望再次指导.图见63楼

第一个菜单项是回设备表的,也就是回根目录
后面的文字是提示,意思是要回上一层目录就按ESC键,当前的目录是xxx

经过你的反馈,我确实也发现了问题,比如System Volume Infomation 这一类带空格的目录,现在我将menuentry后面的参数变量都加上了双引号,但还是有问题,一时还排查不出原因,等我找到原因我会更新。
但我的更新也是不带筛选功能的,你需要的话还是要自己加上筛选语句。如果带筛选的话就不如直接筛选出可启动的文件,也就是支持引导的文件就列自动菜单,不支持的就忽略。因为我想要看的是所有文件,所以我不加筛选功能。
作者: wangziqiang    时间: 2020-1-13 22:47
hilsonma 发表于 2020-1-13 20:19
第一个菜单项是回设备表的,也就是回根目录
后面的文字是提示,意思是要回上一层目录就按ESC键,当前的 ...

是我没有留意esc的提示,你的想法很好啊,筛选出可启动的文件,也好啊。看着比较整洁舒服。
作者: zhangke6    时间: 2020-1-14 09:06
太强大了,期待已久。
作者: wintoflash    时间: 2020-1-15 08:44
PM里面没法发图。补图。



作者: hilsonma    时间: 2020-1-15 12:39
wangziqiang 发表于 2020-1-13 22:47
是我没有留意esc的提示,你的想法很好啊,筛选出可启动的文件,也好啊。看着比较整洁舒服。

已更新。
但是没有筛选,如要筛选可自行添加。
仿照之前筛选$开头文件一样,改成比对扩展名,不符合第二参数的就忽略。
run后面定义第二参数,有第二参数就筛选,没有第二参数就不筛选。
第二参数如:.wim.iso.vhd.vhdx.cfg.efi 这样的扩展名序列
可能需要将提取的扩展名大写转小写以便比对
附上从别人处抄来的大写转小写代码供参考(不知是super grub2 boot disk 还是别的启动模板,记不清了。)
lowercase.7z (1.21 KB, 下载次数: 42)


你看,是不是相对复杂了许多,加上我本来需要的就是查看所有的文件,所以我目前不考虑添加筛选功能。
作者: wintoflash    时间: 2020-1-15 12:54
hilsonma 发表于 2020-1-15 12:39
已更新。
但是没有筛选,如要筛选可自行添加。
仿照之前筛选$开头文件一样,改成比对扩展名,不符合第 ...

tr命令可以转换大小写.要加tr模块.
作者: hilsonma    时间: 2020-1-15 13:08
wintoflash 发表于 2020-1-15 12:54
tr命令可以转换大小写.要加tr模块.

感谢指导。原先没有留意tr模块。
作者: wangziqiang    时间: 2020-1-15 23:15
wintoflash 发表于 2020-1-15 12:54
tr命令可以转换大小写.要加tr模块.

感谢,先下了收藏 忙过这两天再仔细研究下.

同时也感谢W大师,他之前的很多东西,坛子上都找不到了,

最近跟你们学到了。谢谢!我基础不行,只能硬肯代码,之前是一窍不通,现在能看懂一点点。
作者: hhh333    时间: 2020-1-18 11:46
这个适用于BIOS还是EFI?
作者: hilsonma    时间: 2020-1-18 11:57
hhh333 发表于 2020-1-18 11:46
这个适用于BIOS还是EFI?

适用于UEFI.
BIOS下我会使用SISO.
作者: zgj    时间: 2020-1-19 08:17
列兵无法下载
作者: zgj    时间: 2020-1-19 23:18
正是需要的功能
作者: hilsonma    时间: 2020-1-19 23:39
zgj 发表于 2020-1-19 08:17
列兵无法下载

http://hilsonma.ys168.com/
作者: zhxy9804    时间: 2020-1-26 11:44
你好,我看了一下,boot.sdi很迷你,bootmgfw.efi也是2015年的,这个有讲究吗?还是你所选的版本启动兼容性比较好呢? 如果是的话,能说一下从那个adk提取的吗?我最近遇到你的BIOS挑启动盘的现象

作者: hilsonma    时间: 2020-1-26 12:51
zhxy9804 发表于 2020-1-26 11:44
你好,我看了一下,boot.sdi很迷你,bootmgfw.efi也是2015年的,这个有讲究吗?还是你所选的版本启动兼容性比较 ...

纯粹是个人偏好。
我优先使用体积小的。
我把我下载过的PE的都试用了,发现有体积更小的就选用更小的,当然,兼容有问题的就淘汰掉,然后结果就是现在用的这两个文件。目前我个人用没有问题,不能保证在其他电脑有没有问题。
一般来说,应该是高版本的兼容性会更好吧。

我选用PE的方式原先也是优先体积小的,后来才改成选用启动速度快的。

轻度小体积强迫症
作者: zhxy9804    时间: 2020-1-26 14:39
hilsonma 发表于 2020-1-26 12:51
纯粹是个人偏好。
我优先使用体积小的。
我把我下载过的PE的都试用了,发现有体积更小的就选用更小的, ...

好的,我也有强迫症.我想把你的这个boot.sdi跟bootmgr的用一个,
你这个配置文件应该怎么写
就是变量该怎么写,bootmgr的boot.sdi在根目录boot目录里面
作者: wintoflash    时间: 2020-1-26 15:49
hilsonma 发表于 2020-1-26 12:51
纯粹是个人偏好。
我优先使用体积小的。
我把我下载过的PE的都试用了,发现有体积更小的就选用更小的, ...

据说,如果用这个体积比较小的boot.sdi,启动某些有多个卷的wim,会出问题。

作者: hilsonma    时间: 2020-1-26 16:00
本帖最后由 hilsonma 于 2020-1-26 16:01 编辑
zhxy9804 发表于 2020-1-26 14:39
好的,我也有强迫症.我想把你的这个boot.sdi跟bootmgr的用一个,
你这个配置文件应该怎么写
就是变量该怎 ...

先 search -n -s -f /boot/boot.sdi
然后使用 $root/boot/boot.sdi

不想改变root变量的话就先 search -n -s sdidev -f /boot/boot.sdi
然后使用 $sdidev/boot/boot.sdi
sdidev这个变量名可以改成其他的你喜欢的变量名。不指定变量名就默认搜到的分区写入root (修改root变量)

建议放在grub.cfg同一个目录或其下的子目录中,这样就可以不搜索直接使用 prefix 变量
如:$prefix/boot.sdi 或 $preifx/boot/boot.sdi 这样的
prefix变量是指grub.cfg所在目录

bootmgr 使用的boot.sdi 并不一定是在 \boot 的
bootmgr 默认使用 \boot\bcd
bootmgr 使用的boot.sdi的位置在 \boot\bcd 这个配置文件中指定。
作者: hilsonma    时间: 2020-1-26 16:07
本帖最后由 hilsonma 于 2020-1-26 16:28 编辑
wintoflash 发表于 2020-1-26 15:49
据说,如果用这个体积比较小的boot.sdi,启动某些有多个卷的wim,会出问题。

感谢分享。
我没有试过启动多卷的wim。有你这个提示,如果碰到相关情形我就有数了。
我还是继续使用小体积的sdi. 如果有人提出问题我会建议他改用单卷wim或自行替换较大那个sdi.
为了大众化傻瓜化使用,现在的软件是越来越大型,我的手机16G -> 32G -> 64G 总是跟不上,没有米啊
所以我一直有小体积强迫症


作者: zhxy9804    时间: 2020-1-26 16:26
本帖最后由 zhxy9804 于 2020-1-26 16:27 编辑
hilsonma 发表于 2020-1-26 16:07
感谢分享。
我没有试过启动多卷的wim。有你这个提示,如果碰到相关情形我就有数了。
我还是继续使用小 ...

嗯,多谢指导,还是继续向你提问
我下载了几个主题文件,怎么都提示不支持?
主题有论坛的,有你推荐的外国网站下载的.

光盘测试的,
#### For Bios+EFI64/32 edit by H3 ####
#set default=0
#set fallback=0
set gfxmode=1024x768,auto
set gfxterm_font=unicode
set lang=zh_CN
set locale_dir=$prefix/locale
set pager=1
set timeout=30
set enable_progress_indicator=0

#激活图形模式的输出终端,以允许使用中文和背景图
terminal_output gfxterm
#设置背景图片或颜色
#background_image $prefix/themes/winly/wallpaper.png
#if [ $? != 0 ]; then background_color "#003345"
#fi
#加载字体文件($prefix/fonts/unicode.pf2)
loadfont unicode
#加载主题
set theme=$prefix/themes/theme.txt
#export theme


作者: hilsonma    时间: 2020-1-26 16:34
本帖最后由 hilsonma 于 2020-1-26 16:49 编辑
zhxy9804 发表于 2020-1-26 16:26
嗯,多谢指导,还是继续向你提问
我下载了几个主题文件,怎么都提示不支持?
主题有论坛的,有你推荐的外国 ...

要使用jpg图片,在定制efi文件时需要包含jpeg模块
如果要测试各项功能,建议定制一个包含所有模块的efi文件专用于测试,这样在测试时可以避免缺少模块问题。
当然,象我这样的强迫症在真正使用时还是要定制一个较小的efi文件的。
如果确认已有jpeg模块,请自行使用图像软件重新转换一次图片格式为jpg,以防原图片使用了不恰当的文件扩展名。


作者: zhxy9804    时间: 2020-1-26 18:39
本帖最后由 zhxy9804 于 2020-1-26 18:43 编辑
hilsonma 发表于 2020-1-26 16:34
要使用jpg图片,在定制efi文件时需要包含jpeg模块
如果要测试各项功能,建议定制一个包含所有模块的efi ...

我用的是wintoflash的,直接双击生成的,看样子大神都化简为繁还有,生成文件后,i386-pc,x86_64-efi是否还必须拷贝进去呢?
wintoflash的包含所有模块应该怎么写呢?

作者: hilsonma    时间: 2020-1-26 20:16
zhxy9804 发表于 2020-1-26 18:39
我用的是wintoflash的,直接双击生成的,看样子大神都化简为繁还有,生成文件后,i386-pc,x86_64-efi是否还必 ...

生成文件后,直接使用efi文件,不需要拷贝模块文件夹了。
附件是我从wintoflash某个贴子中复制的模块表(不记得是磁盘仿真还是ntboot还是哪个贴子了,总之模块数量比他的下载包中那个arch\x64\builtin.txt 还要多)。
x64all.txt (841 Bytes, 下载次数: 23)
你把这个x64all.txt放到grub2文件夹,将wintoflash的build_grub.bat 复制一个副本,将其中的这一句
set /p modules= < arch\x64\builtin.txt
改成
set /p modules= < x64all.txt
再双击修改后的副本生成efi文件
作者: hilsonma    时间: 2020-1-26 20:22
zhxy9804 发表于 2020-1-26 18:39
我用的是wintoflash的,直接双击生成的,看样子大神都化简为繁还有,生成文件后,i386-pc,x86_64-efi是否还必 ...

用wintoflash的下载包直接双击生成的efi文件是包含jpeg模块的,你自己转换生成一个jpg图片替换到主题中看支持不支持。
作者: zhxy9804    时间: 2020-1-26 20:33
本帖最后由 zhxy9804 于 2020-1-27 10:25 编辑
hilsonma 发表于 2020-1-26 20:22
用wintoflash的下载包直接双击生成的efi文件是包含jpeg模块的,你自己转换生成一个jpg图片替换到主题中看 ...

实测,最新版本wintoflash,不包含,我把buildtxt文件 末尾追加了个jpeg,显示ok了!
run.cfg是否可以修改最后一段,改成这样子,好共用呢
function xntboot {ntboot -e /Efi/Boot/bootmgfw.efi -s /Boot/boot.sdi $1;}
不过貌似没定义bcd位置

作者: hilsonma    时间: 2020-1-27 17:03
zhxy9804 发表于 2020-1-26 20:33
实测,最新版本wintoflash,不包含,我把buildtxt文件 末尾追加了个jpeg,显示ok了!
run.cfg是否可 ...

bcd 已经在ntboot 模块内置了。
你可以修改xntboot的定义以符合你的部署
如果路径有问题就在前面加设备变量(指定分区)补充完整。
作者: zhxy9804    时间: 2020-1-27 17:22
hilsonma 发表于 2020-1-27 17:03
bcd 已经在ntboot 模块内置了。
你可以修改xntboot的定义以符合你的部署
如果路径有问题就在前面加设备 ...

那run目录里面ms里面的bcd可以删除吗?
作者: hilsonma    时间: 2020-1-27 20:22
zhxy9804 发表于 2020-1-27 17:22
那run目录里面ms里面的bcd可以删除吗?

可以。那个bcd我是用来直接bootmgfw.efi 引导efi区根目录下的pe.wim的,你查看bcd的内容就会知道。
作者: zhxy9804    时间: 2020-1-27 20:43
hilsonma 发表于 2020-1-27 20:22
可以。那个bcd我是用来直接bootmgfw.efi 引导efi区根目录下的pe.wim的,你查看bcd的内容就会知道。

明白,最近我才发现grub2的妙用,所以一直再研究,
相比grub4dos来说,太难了,不过功能的确强大啊
作者: mqtdut    时间: 2020-2-3 18:40
太方便了,非常感谢
作者: langyun    时间: 2020-2-21 08:42
技术贴

鉴定完毕



O(∩_∩)O
作者: bwchame    时间: 2020-2-22 07:46
刚开始学习,先收藏。
作者: bwchame    时间: 2020-3-8 08:26
想下载,没积分 (  )
作者: hilsonma    时间: 2020-3-8 14:47
本帖最后由 hilsonma 于 2020-3-8 14:50 编辑
bwchame 发表于 2020-3-8 08:26
想下载,没积分 (  )

http://hilsonma.ys168.com

grub2/run.7z


作者: bwchame    时间: 2020-3-8 15:25
лл




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3