hilsonma 发表于 2019-12-31 08:23:33

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分区.

指南针 发表于 2019-12-31 08:49:18

这个可以有

江南一根葱 发表于 2019-12-31 09:31:52

这样好像应该只适合修改版grub2吧,{:1_186:}而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址,
这个run,我有个很变态的写法,我酝酿一下折腾折腾,绝对变态,绝对的,

hilsonma 发表于 2019-12-31 09:59:53

江南一根葱 发表于 2019-12-31 09:31
这样好像应该只适合修改版grub2吧,而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址 ...

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

拭目以待最伟的变态之作{:1_186:}

江南一根葱 发表于 2019-12-31 11:19:36

hilsonma 发表于 2019-12-31 09:59
当然只适合修改版grub2,只是三个cfg文件,功能都是基于wintoflash的相关模块支持。

拭目以待最伟的变 ...

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

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

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

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

tdqk003 发表于 2019-12-31 13:24:52

请问大师 支持普通BIOS吗

liaonf 发表于 2019-12-31 13:41:32

早就该出手了,Grub2是大势所趋啊

sghihor 发表于 2019-12-31 13:46:06

江南一根葱 发表于 2019-12-31 11:19
那不如打包成单efi啊,反正都启动了,
想返回原菜单的话,你把里面的弄成返回你的菜单。



谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.

hilsonma 发表于 2019-12-31 14:33:28

tdqk003 发表于 2019-12-31 13:24
请问大师 支持普通BIOS吗

道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动菜单应该是可以显示的。

tdqk003 发表于 2019-12-31 15:05:40

hilsonma 发表于 2019-12-31 14:33
道理上讲是支持,你看我列出的模块,如果bios模式里有这些模块就支持,没有的模块就缺少相应的功能。自动 ...

大师啊我试过了不行了少几个模块   一散就过没有反映

hilsonma 发表于 2019-12-31 15:19:47

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

嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什么用
虽然可以修改成引用g4d的方式,但我认为没有那个必要。
bios下还是直接用g4d吧,我都是用g4d的。

tdqk003 发表于 2019-12-31 15:30:07

hilsonma 发表于 2019-12-31 15:19
嗯,刚试了一下,没有关键的三大模块 map ntboot wimboot
可以自动菜单,但只能测试cfg文件,所以没有什 ...

非常感谢大师{:1_195:}

hilsonma 发表于 2019-12-31 16:16:05

本帖最后由 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:16

本帖最后由 hilsonma 于 2019-12-31 18:01 编辑

sghihor 发表于 2019-12-31 13:46
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.
以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱 也 提过grub2搜索文件慢,我觉得用我现在的方式在实机上操作还可以,不觉得慢。

wintoflash 发表于 2019-12-31 17:41:24

hilsonma 发表于 2019-12-31 16:16
会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子 ...

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


hilsonma 发表于 2019-12-31 18:09:39

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

你的ntboot的贴子提到过实现的过程,我知道要转换路径,是不好做
wimboot的具体实现我不了解,不知道是怎么做到的,有没有参考的地方。在你看来应该是没有共通的,要不然你已经参考了,我只是想弄个明白,或者希望有人能解决。

hilsonma 发表于 2019-12-31 18:44:03

本帖最后由 hilsonma 于 2019-12-31 18:47 编辑

wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

20160618 发表于 2019-12-31 18:58:41

本帖最后由 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:04

本帖最后由 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:12

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

确实需要字体,我记着以前用的时候有加字体回头我查一下看看我还有保存档没!

江南一根葱 发表于 2019-12-31 20:35:31

中文iso倒是常用,中文wim我倒是还没折腾过,估计用“乱码”加载就可以了吧

江南一根葱 发表于 2019-12-31 20:47:43

hilsonma 发表于 2019-12-31 16:56
以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱 也 提过grub2搜索文件慢,我觉 ...

看怎么搜索吧,我以前是全盘搜索,,只搜两层目录倒不是很慢,而且貌似grub2搜文件还有大小写问题,要搜索两遍,烦得很,

shan 发表于 2020-1-1 10:00:48

万分感谢!终于有我需要的功能了,有时间再测试哈

wdtx 发表于 2020-1-1 14:44:13

学习学习,谢谢大神分享。。。

wintoflash 发表于 2020-1-1 15:02:37

逗我呢,g4d的NTBOOT本来就不支持中文名啊!




wintoflash 发表于 2020-1-1 15:28:20

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字符的规定相矛盾。

hilsonma 发表于 2020-1-1 15:38:47

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

不好意思,我没有试过ntboot,我试的是run。
我知道siso走的是wimboot,不知道run走的是wimboot还是ntboot,我看siso显示正常而run显示不正常以为走的是不一样的。
我是业余有兴趣边看边学的,有些做得不到位或表达不到位,让你费心了,请多多包涵。感谢你的努力。

wintoflash 发表于 2020-1-1 15:47:39

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:27

本帖最后由 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:28:58

本帖最后由 hilsonma 于 2020-1-1 16:37 编辑

wintoflash 发表于 2020-1-1 15:47
能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转 ...
刚试了,bcd设置中文wim名,能正常启动。




页: [1] 2 3 4 5 6 7
查看完整版本: grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)