无忧启动论坛

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

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

    [复制链接]
跳转到指定楼层
1#
发表于 2019-12-31 08:23:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hilsonma 于 2020-1-26 16:23 编辑

run.7z (568.88 KB, 下载次数: 1291)
特别感谢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分区.

评分

参与人数 10无忧币 +46 收起 理由
游鱼摆尾 + 5 很给力!
gues1688 + 5 很给力!
cuicongyuan + 5 赞一个!
wuxin9712 + 5 5
879792799 + 5 大大 有实力 有想法 未来新星啊!
jack612 + 1
jxdeng2017 + 5 终于看到了Grub2的 Autorun ,很给力!
shan + 5 万分感谢!终于有我需求的功能了
sghihor + 5
wintoflash + 5

查看全部评分

2#
发表于 2019-12-31 08:49:18 | 只看该作者
这个可以有
回复

使用道具 举报

3#
发表于 2019-12-31 09:31:52 | 只看该作者
这样好像应该只适合修改版grub2吧,  而且现在貌似写grub2菜单其实比g4d简单了,没有什么内存地址,
这个run,我有个很变态的写法,我酝酿一下折腾折腾,绝对变态,绝对的,

评分

参与人数 1无忧币 +5 收起 理由
879792799 + 5 运量好久了 好了没???哈哈

查看全部评分

回复

使用道具 举报

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

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

拭目以待最伟的变态之作

点评

那不如打包成单efi啊,反正都启动了, 想返回原菜单的话,你把里面的弄成返回你的菜单。 最近瞎忙都没折腾, 大概我就是会把菜单文件弄成可以用save_env来保存变量到自身 然后弄几个僵尸菜单,每种  详情 回复 发表于 2019-12-31 11:19
回复

使用道具 举报

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

拭目以待最伟的变 ...

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

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

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

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

点评

会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子,他用的bcd文件是分winload.exe和winload.efi的,其实不需要在bcd中指定winload的,bootmgfw.efi 和bootmgr  详情 回复 发表于 2019-12-31 16:16
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.  详情 回复 发表于 2019-12-31 13:46
回复

使用道具 举报

6#
发表于 2019-12-31 13:24:52 | 只看该作者
请问大师 支持普通BIOS吗

点评

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

使用道具 举报

7#
发表于 2019-12-31 13:41:32 | 只看该作者
早就该出手了,Grub2是大势所趋啊
回复

使用道具 举报

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

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

点评

以我所知的方法,使用打包得来的efi效率不如cfg.  详情 回复 发表于 2019-12-31 16:56
回复

使用道具 举报

9#
 楼主| 发表于 2019-12-31 14:33:28 | 只看该作者
tdqk003 发表于 2019-12-31 13:24
请问大师 支持普通BIOS吗

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

点评

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

使用道具 举报

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

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

点评

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

使用道具 举报

11#
 楼主| 发表于 2019-12-31 15:19:47 | 只看该作者
tdqk003 发表于 2019-12-31 15:05
大师啊  我试过了  不行了  少几个模块   一散就过  没有反映

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

点评

非常感谢大师  详情 回复 发表于 2019-12-31 15:30
回复

使用道具 举报

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

非常感谢大师
回复

使用道具 举报

13#
 楼主| 发表于 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了。

点评

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

使用道具 举报

14#
 楼主| 发表于 2019-12-31 16:56:16 | 只看该作者
本帖最后由 hilsonma 于 2019-12-31 18:01 编辑
sghihor 发表于 2019-12-31 13:46
谢大大分享, 如果能打包成 .EFI更方便,就是最伟大大说的.

以我所知的方法,使用打包得来的efi效率不如cfg.
江南一根葱提过grub2搜索文件慢,我觉得用我现在的方式在实机上操作还可以,不觉得慢。

点评

看怎么搜索吧,我以前是全盘搜索,,只搜两层目录倒不是很慢,而且貌似grub2搜文件还有大小写问题,要搜索两遍,烦得很,  详情 回复 发表于 2019-12-31 20:47
回复

使用道具 举报

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

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


点评

刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码 [attachimg]408411[/attachimg]  详情 回复 发表于 2019-12-31 18:44
你的ntboot的贴子提到过实现的过程,我知道要转换路径,是不好做 wimboot的具体实现我不了解,不知道是怎么做到的,有没有参考的地方。在你看来应该是没有共通的,要不然你已经参考了,我只是想弄个明白,或者希望  详情 回复 发表于 2019-12-31 18:09
回复

使用道具 举报

16#
 楼主| 发表于 2019-12-31 18:09:39 | 只看该作者
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。

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

使用道具 举报

17#
 楼主| 发表于 2019-12-31 18:44:03 | 只看该作者
本帖最后由 hilsonma 于 2019-12-31 18:47 编辑
wintoflash 发表于 2019-12-31 17:41
为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。

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

回复

使用道具 举报

18#
发表于 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
加上看看,行不行

点评

其实我在g4d中是用siso的,显示没有问题,只是siso中是可以用wimboot来实现启动pe的,所以我才用跟wimboot不同的run试给wintoflash看看有没有参考作用。 [attachimg]408414[/attachimg]  详情 回复 发表于 2019-12-31 19:11
回复

使用道具 举报

19#
 楼主| 发表于 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编码了的。


回复

使用道具 举报

20#
发表于 2019-12-31 19:11:12 来自手机 | 只看该作者
hilsonma 发表于 2019-12-31 18:44
刚才试了一下g4d的run,是可以启动中文文件名的pe镜像的,只是中文的地方显示变成了编码

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

使用道具 举报

21#
发表于 2019-12-31 20:35:31 | 只看该作者
中文iso倒是常用,中文wim我倒是还没折腾过,估计用“乱码”加载就可以了吧

点评

就是为了给大家通用。我自己这一类文件很少用中文文件名的。  发表于 2020-1-1 12:54
回复

使用道具 举报

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

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

使用道具 举报

23#
发表于 2020-1-1 10:00:48 | 只看该作者
万分感谢!终于有我需要的功能了,有时间再测试哈
回复

使用道具 举报

24#
发表于 2020-1-1 14:44:13 | 只看该作者
学习学习,谢谢大神分享。。。
回复

使用道具 举报

25#
发表于 2020-1-1 15:02:37 | 只看该作者
逗我呢,g4d的NTBOOT本来就不支持中文名啊!




点评

不好意思,我没有试过ntboot,我试的是run。 我知道siso走的是wimboot,不知道run走的是wimboot还是ntboot,我看siso显示正常而run显示不正常以为走的是不一样的。 我是业余有兴趣边看边学的,有些做得不到位或表  详情 回复 发表于 2020-1-1 15:38
回复

使用道具 举报

26#
发表于 2020-1-1 15:28:20 | 只看该作者
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字符的规定相矛盾。
复制代码
回复

使用道具 举报

27#
 楼主| 发表于 2020-1-1 15:38:47 | 只看该作者
wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!

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

点评

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

使用道具 举报

28#
发表于 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名,能不能正常启动?

点评

刚试了,bcd设置中文wim名,能正常启动。 [attachimg]408487[/attachimg]  详情 回复 发表于 2020-1-1 16:28
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi  详情 回复 发表于 2020-1-1 16:00
回复

使用道具 举报

29#
 楼主| 发表于 2020-1-1 16:00:27 | 只看该作者
本帖最后由 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不能参考。

点评

wimboot不需要处理路径。 原理与ntboot类似,但不相同。 ntboot是用虚拟盘上的bcd,启动硬盘上的wim wimboot是用虚拟盘上的bcd,启动虚拟盘上的boot.wim @:boot.wim:/xxx.wim,虚拟盘上的wim就是boot.wim @:abc  详情 回复 发表于 2020-1-1 16:45
用的是wimboot  详情 回复 发表于 2020-1-1 16:42
回复

使用道具 举报

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

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




回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 06:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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