无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: hilsonma
打印 上一主题 下一主题

[分享] 将grub2启动模板封装成efi单文件

  [复制链接]
1#
发表于 2020-5-28 21:26:11 | 显示全部楼层
谢谢分享。
可以把grubfm.efi打包进去,在geub.cfg中作为一个菜单项运行吗?

点评

可以,但是似乎没必要。grubfm本身可以加载外部菜单,想要全内置,可以直接改grubfm源码生成efi。  详情 回复 发表于 2020-5-28 21:30
回复

使用道具 举报

2#
发表于 2020-5-28 22:39:32 | 显示全部楼层
wintoflash 发表于 2020-5-28 21:30
可以,但是似乎没必要。grubfm本身可以加载外部菜单,想要全内置,可以直接改grubfm源码生成efi。

试了一下没成功,不知道是哪里弄错。

我用楼主模板,grub文件夹下只放grub.cfg和grubfmx64.efi(5月14日)两个文件。grub.cfg内容为:
menuentry "grubfm" {
ls (loop)/boot/grub/;
chainloader (loop)/boot/grub/grubfmx64.efi;
}
结果两个文件可见,但.efi运行不了:


点评

启动 EFI 应用需要向其传递该应用的设备路径。(memdisk)是一个不存在的设备,传递空的设备路径很有可能出问题。  详情 回复 发表于 2020-5-29 08:05
grubfmx64.efi本身就是这样打包生成的,不建议二次打包。有需要的,可以直接改grubfm源码再打包生成efi.  详情 回复 发表于 2020-5-29 07:12
回复

使用道具 举报

3#
发表于 2020-5-29 11:54:46 | 显示全部楼层
wintoflash 发表于 2020-5-29 08:05
启动 EFI 应用需要向其传递该应用的设备路径。(memdisk)是一个不存在的设备,传递空的设备路径很有可能出 ...

1、grubfm有通用的优点,所以菜单里必备;grubfm有通用的缺点,要启动指定文件每次还需要一番选择,不能直达(也许grubfm有命令行方式可以直达?)
2、完全取代grub2命令,所有功能都由grubfm出发,毕竟还不方便。所以,不想把grubfmx64.efi直接作为bootx64.efi加载,只想把grubfm作为楼主菜单的一项,菜单还需要有其它菜单项。
3、把grubfmx64.efi放在U盘,菜单里调用它不成问题。现在追求清爽,要求把grubfm功能(不管是什么后缀,不管多少个文件)打包内置于bootx64.efi,问题来了。这个问题只有改源码才能解决么?
4、grub2启动grubfmx64.efi时,如何简单地传递一个设备路径?试过先search -f -s /efi/pe.wim把当前路径设为U盘,并无效果。

点评

可以不动源码,魔改一下 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420722&extra=page%3D1 我刚才改的时候倒也遇到过这个root设备不正确启不来efi的的问题  详情 回复 发表于 2020-5-29 15:41
更新了一下,现在如果 EFI 文件位于不存在的磁盘上,会传递 root 设备的路径。 但是,我仍然不建议这种俄罗斯套娃的做法。 EFI 文件本来就应该放在固件能够认得到的硬盘上,否则在运行的过程中也可能会出问题。  详情 回复 发表于 2020-5-29 14:57
回复

使用道具 举报

4#
发表于 2020-5-31 09:23:38 | 显示全部楼层
wintoflash 发表于 2020-5-29 14:57
更新了一下,现在如果 EFI 文件位于不存在的磁盘上,会传递 root 设备的路径。

但是,我仍然不建议这 ...

谢谢!更新后可以了。

另外遇到一个问题:wimboot可以启动(hd1)/pe.wim,即ud里的wim。uefi启动时,pe是否藏入ud都随意。而ntboot则报错:
this command is available only for disk devices.
感觉是ntboot作了限制,其实对此情形可以放宽。

点评

这不是程序做出的限制,而是 ntboot 本身的局限。 你没有用 grub4dos ntboot 启动过 ud 区里面的 wim 吧。  详情 回复 发表于 2020-5-31 09:50
回复

使用道具 举报

5#
发表于 2020-5-31 09:25:50 | 显示全部楼层
江南一根葱 发表于 2020-5-29 15:41
可以不动源码,魔改一下
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420722&extra=pa ...

效果看来不错。四教程还要慢慢理解。
回复

使用道具 举报

6#
发表于 2020-6-2 11:38:52 | 显示全部楼层
wintoflash 发表于 2020-5-31 09:50
这不是程序做出的限制,而是 ntboot 本身的局限。
你没有用 grub4dos ntboot 启动过 ud 区里面的 wim 吧 ...

谢谢,明白了,看来要改ntboot才行,暂时先用wimboot吧。
回复

使用道具 举报

7#
发表于 2020-6-2 11:42:15 | 显示全部楼层
楼主的模板不错,谢谢分享。
试着简化一下:http://bbs.wuyou.net/forum.php?m ... &fromuid=195661
回复

使用道具 举报

8#
发表于 2020-6-26 19:04:09 | 显示全部楼层
请教楼主,pre.cfg里,能用if语句吗?

点评

可以的。  详情 回复 发表于 2020-6-26 19:37
回复

使用道具 举报

9#
发表于 2020-6-26 21:27:38 | 显示全部楼层
可是,我把楼主pre.cfg中第一行
loopback loop (memdisk)/memdisk.cpio.gz
改成这样:
if [ 1 == 1 ]; then loopback loop (memdisk)/memdisk.cpio.gz; fi
就不灵了,是哪里出了问题?

点评

不是应该if [ "1"= "1" ]; 么,不过这个1=1是什么东东  详情 回复 发表于 2020-6-26 22:04
回复

使用道具 举报

10#
发表于 2020-6-26 23:43:09 | 显示全部楼层
江南一根葱 发表于 2020-6-26 22:04
不是应该if [ "1"= "1" ]; 么,不过这个1=1是什么东东

也不行。
在grub提示符下试好的if语句放到pre.cfg里就不行,导致菜单出不来了。

点评

看样子你是想在嵌入grub的配置里面用if。 这不行。 只有进入normal环境后才能用if then function while return 等流程控制语句,在这之前是rescue环境,只支持简单语句。  详情 回复 发表于 2020-6-27 06:30
你的 grub提示符下 需要是你制作生成的efi文件的命令行,这样你就会知道是不是少了模块 你检查一下是不是你制作efi文件的模块列表中没有 test 模块 pre.cfg 主要是为了解决 root 和 prefix 这两个变量而存在,只  详情 回复 发表于 2020-6-27 00:56
回复

使用道具 举报

11#
发表于 2020-6-27 11:33:19 | 显示全部楼层
明白了,谢谢诸位。
既然不支持,那就用别的方式解决吧。

回复

使用道具 举报

12#
发表于 2020-11-17 18:30:23 | 显示全部楼层
tdqk003 发表于 2020-11-17 15:25
大神请问在BISO下也能封装成单文件吗   谢谢大神

如果用grub4dos,倒是能封装成大体积grldr单文件

点评

grldr可以撑到几mb吗?  详情 回复 发表于 2020-11-17 20:08
回复

使用道具 举报

13#
发表于 2020-11-18 12:35:15 | 显示全部楼层
本帖最后由 pseudo 于 2020-11-18 12:43 编辑
wintoflash 发表于 2020-11-17 20:08
grldr可以撑到几mb吗?

当初单文件化用的是手工“续尾法”:http://bbs.wuyou.net/forum.php?m ... tra=page%3D1&page=1
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=163626
后来fbinsttool工具已经把续尾工作自动化通用化了。

续尾法其实并没有实质性改变grldr,所以与体积关系不大。
如果.efi没有校验方面问题,原则上应该也可以用续尾法实现单文件化。

点评

> 续尾法其实并没有实质性改变grldr,所以与体积关系不大。 最多能续多少?4GB? > 如果.efi没有校验方面问题,原则上应该也可以用续尾法实现单文件化。 不可以。PE格式不能这样做。  详情 回复 发表于 2020-11-18 13:55
回复

使用道具 举报

14#
发表于 2020-11-20 11:37:11 | 显示全部楼层
wintoflash 发表于 2020-11-18 13:55
> 续尾法其实并没有实质性改变grldr,所以与体积关系不大。
最多能续多少?4GB?把一个winpe的iso都弄进 ...

1、续尾容易
copy命令带/B参数就可以实现。
2、尾大无妨
加了5GB尾部的大grldr跟原来的grldr功能一样。grub4dos载人stage2之类时不涉及尾部。
3、尾部可map
且假定大grldr在盘上是连续存放无碎片的。
已知续尾前grldr大小,blocklist命令可以找到大grldr起始位置和大小,推算出尾部在盘上的起始、大小,map之。无--mem尾大无妨,带--mem则看内存容量。
另外,可以先将大grldr(允许碎片)整个map到(rd),再对(rd)盘进行操作。只要内存足,尾大无妨。

点评

grub.exe也能续尾?  详情 回复 发表于 2020-11-20 19:51
回复

使用道具 举报

15#
发表于 2020-11-21 12:28:27 | 显示全部楼层
本帖最后由 pseudo 于 2020-11-21 13:44 编辑
wintoflash 发表于 2020-11-20 19:51
grub.exe也能续尾吗?

grldr没问题,没试过grub.exe。
你可以用
copy /B grub.exe /B +pe.iso /B
命令对grub.exe进行续尾,看续尾后grub.exe原有功能有没有受到影响。
只要续尾不影响原功能,就有机会通过续尾实现单文件化。续尾比内置响应快。

至于UEFI启动,刚在qemu中试了对bootx64.efi续7MB尾,成功启动,原功能不受影响。
只试了一次,没在其它环境、尤其是安全启动环境作更多测试。


点评

efi的copy/b老早试过,不过不知道怎么利用。。。  详情 回复 发表于 2020-11-21 14:06
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-8 05:27

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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