grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)
本帖最后由 hilsonma 于 2020-1-26 16:23 编辑特别感谢wintoflash的指导。终于将此功能完善。
将附件里的run文件夹整个提取出来放到grub.cfg所在文件夹
再在grub.cfg 中加上这一句:
source $prefix/run/run.cfg
然后就可以在grub2中使用run命令了。
可以将目录列成自动菜单。
可以查找并引导efi、wim、vhd、vhdx、iso 和 cfg (grub2配置文件)。
需要以下模块支持:chain configfile echo map ntboot probe regexp search test
用法示例一:将各分区的目录 /pe 全部列成自动菜单
run /pe
用法示例二:查找并引导 /Windows/Boot/EFI/bootmgfw.efi
run /Windows/Boot/EFI/bootmgfw.efi
用法示例三:查找并启动 /pe.wim
run /pe.wim
用法示例四:查找并启动 /vhd/win81.vhdx
run /vhd/win81.vhdx
用法示例五:查找并测试 /pe/test.cfg
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分区. 这个可以有 这样好像应该只适合修改版grub2吧,{:1_186:}而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址,
这个run,我有个很变态的写法,我酝酿一下折腾折腾,绝对变态,绝对的, 江南一根葱 发表于 2019-12-31 09:31
这样好像应该只适合修改版grub2吧,而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址 ...
当然只适合修改版grub2,只是三个cfg文件,功能都是基于wintoflash的相关模块支持。
拭目以待最伟的变态之作{:1_186:} hilsonma 发表于 2019-12-31 09:59
当然只适合修改版grub2,只是三个cfg文件,功能都是基于wintoflash的相关模块支持。
拭目以待最伟的变 ...
那不如打包成单efi啊,反正都启动了{:1_201:},
想返回原菜单的话,你把里面的弄成返回你的菜单。
最近瞎忙都没折腾,
大概我就是会把菜单文件弄成可以用save_env来保存变量到自身
然后弄几个僵尸菜单,每种菜单对应一种启动方式,
菜单所有行前面弄个变量,变量值默认是#号,就是不出现菜单,
如果是iso格式的,那就把iso前面的变量由变量值#号变成空,iso相应的菜单就会显示了,就会启动了,
然后加密菜单,这样显得神秘
哈哈
请问大师 支持普通BIOS吗 早就该出手了,Grub2是大势所趋啊 江南一根葱 发表于 2019-12-31 11:19
那不如打包成单efi啊,反正都启动了,
想返回原菜单的话,你把里面的弄成返回你的菜单。
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的. tdqk003 发表于 2019-12-31 13:24
请问大师 支持普通BIOS吗
道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动菜单应该是可以显示的。 hilsonma 发表于 2019-12-31 14:33
道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动 ...
大师啊我试过了不行了少几个模块 一散就过没有反映 tdqk003 发表于 2019-12-31 15:05
大师啊我试过了不行了少几个模块 一散就过没有反映
嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什么用
虽然可以修改成引用g4d的方式,但我认为没有那个必要。
bios下还是直接用g4d吧,我都是用g4d的。 hilsonma 发表于 2019-12-31 15:19
嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什 ...
非常感谢大师{:1_195:} 本帖最后由 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 18:01 编辑
sghihor 发表于 2019-12-31 13:46
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.
以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱 也 提过grub2搜索文件慢,我觉得用我现在的方式在实机上操作还可以,不觉得慢。 hilsonma 发表于 2019-12-31 16:16
会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子 ...
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。
你的ntboot的贴子提到过实现的过程,我知道要转换路径,是不好做
wimboot的具体实现我不了解,不知道是怎么做到的,有没有参考的地方。在你看来应该是没有共通的,要不然你已经参考了,我只是想弄个明白,或者希望有人能解决。 本帖最后由 hilsonma 于 2019-12-31 18:47 编辑
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码
本帖最后由 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: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编码了的。
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码
确实需要字体,我记着以前用的时候有加字体回头我查一下看看我还有保存档没! 中文iso倒是常用,中文wim我倒是还没折腾过,估计用“乱码”加载就可以了吧 hilsonma 发表于 2019-12-31 16:56
以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱 也 提过grub2搜索文件慢,我觉 ...
看怎么搜索吧,我以前是全盘搜索,,只搜两层目录倒不是很慢,而且貌似grub2搜文件还有大小写问题,要搜索两遍,烦得很, 万分感谢!终于有我需要的功能了,有时间再测试哈 学习学习,谢谢大神分享。。。
逗我呢,g4d的NTBOOT本来就不支持中文名啊!
wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!
Windows操作系统内核中的字符表示为UTF-16小尾序,可以正确处理、显示以4字节存储的字符。但是Windows API实际上仅能正确处理UCS-2字符,即仅以2字节存储的,码位小于U+FFFF的Unicode字符。其根源是Microsoft C++语言把 wchar_t 数据类型定义为16比特的unsigned short,这就与一个 wchar_t 型变量对应一个宽字符、可以存储一个Unicode字符的规定相矛盾。 wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!
不好意思,我没有试过ntboot,我试的是run。
我知道siso走的是wimboot,不知道run走的是wimboot还是ntboot,我看siso显示正常而run显示不正常以为走的是不一样的。
我是业余有兴趣边看边学的,有些做得不到位或表达不到位,让你费心了,请多多包涵。感谢你的努力。 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:09 编辑
wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi
稍后我试一下改bcd用中文文件名的wim,我疑惑的是你们的wimboot是怎样处理wim路径的,为什么ntboot不能参考。
本帖最后由 hilsonma 于 2020-1-1 16:37 编辑
wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...
刚试了,bcd设置中文wim名,能正常启动。