无忧启动论坛

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

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

  [复制链接]
跳转到指定楼层
#
发表于 2020-1-18 17:17:05 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hilsonma 于 2020-3-9 12:10 编辑

20200308更新:感谢 nivigo 的分享,让我实现了在Windows下的封装,不需要linux环境封装,参见 windows下的封装

详细讲解请参看以下20200308更新前的内容:

附件是一个封装模板,里面是一个linux脚本build.sh 和一个文件夹build
build文件夹里有2个文件和一个文件夹
这两个文件一个是启动模板使用到的模块清单mod.txt ,一个是预配置文件pre.cfg
文件夹boot下有子文件夹grub,grub文件夹内是我的启动模板的整套文件

efi单文件封装模板.7z (568.45 KB, 下载次数: 1296)
efi单文件封装模板.7z
|
|-- build.sh
|-+ build
|------ pre.cfg
|------ mod.txt
|-----+ boot
|---------+ grub
|-------------- grub.cfg
|-------------+ run
|------------------ run.cfg
|------------------ rundir.cfg
|------------------ runseek.cfg
|-----------------+ ms
|---------------------- boot.sdi
|---------------------- bootmgfw.efi

下载模板解压放到grub2文件夹
将 build/boot/grub 里的内容清空,换上你自己的启动模板的整套文件
按你的启动模板用到的模块来修改模块清单文件 build/mod.txt
    注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
    这6个模块不能缺少
进入linux系统,在linux系统中执行build.sh 就会生成 bootx64.efi .


感谢wintoflash,是他的指导和分享的源码让我学会了这个封装方法。
同时感谢江南一根葱,在学习这个方法之前就已经得到他的指点,知道了方向。

--------------------------------------------------------------------------------------------------------------------
如果电脑没有安装linux系统,可以到这里下载porteus绿色免安装版
将porteus文件夹提取放到任一分区根目录,将其中的porteus.cfg放到自动菜单目录,就可以在自动菜单中选择启动

--------------------------------------------------------------------------------------------------------------------
脚本解读:

#!/usr/bin/env sh
#  指明脚本解释器

cd build
#  进入 build目录

find ./boot | cpio -o -H newc | gzip -9 > ./memdisk.cpio.gz
#  搜索boot目录 以newc格式归档 最大压缩 生成压缩文件memdisk.cpio.gz

find ./memdisk.cpio.gz | cpio -o -H newc > ./memdisk.cpio
#  搜索memdisk.cpio.gz文件 以newc格式归档 生成归档文件 memdisk.cpio

cd ..
#  返回上一层目录

modules=$(cat build/mod.txt)
#  将模块清单文件mod.txt 的内容设为变量modules

grub-mkimage -O x86_64-efi -d x86_64-efi -m build/memdisk.cpio -c build/pre.cfg -o bootx64.efi $modules
#  定制efi文件  64位efi格式  使用x86_64-efi中的模块  使用内存盘其中载入build/memdisk.cpio归档的内容
#              使用预配置文件build/pre.cfg  生成文件名为bootx64.efi  包含模块如变量modules的内容

--------------------------------------------------------------------------------------------------------------------
使用内存盘参数定制时会默认-p (memdisk)/boot/grub
由于使用了压缩,内存盘memdisk中是压缩文件,不是直接的配置文件,所以要使用预配置文件进行预配置

pre.cfg预配置文件解读:

loopback loop (memdisk)/memdisk.cpio.gz
# 将内存盘的压缩文件(memdisk)/memdisk.cpio.gz挂载为虚拟盘loop

set root=loop
# 将loop设为root

set prefix=($root)/boot/grub
# 将(loop)/boot/grub设为安装目录(配置目录)
# 这样grub2启动时就会使用(loop)/boot/grub/grub.cfg进行配置
# 所以启动模板的主程序需要命名为grub.cfg

--------------------------------------------------------------------------------------------------------------------
使用举例:
比如wintoflash的run源码,改用这个模板封装

先将build/boot/grub 里的内容清空
再将run源码里run.tar\boot\grub\ 目录下的所有内容提取到 build/boot/grub
    将主程序init.sh改名为grub.cfg
    这个封装模板使用grub.cfg作为主程序名,要不然就要修改预配置文件
将run源码里run.tar\arch\x64\builtin.txt的内容覆盖到 build/mod.txt
    源码中模块清单文件里的模块是齐全的,如果是自己的模板要注意包含上面说的6个模块。
在linux环境下执行build.sh

这样就生成了bootx64.efi,可以直接使用,也可以改回原本的程序名run.efi 在其他efi中调用,按需要加上参数。

点评

大大是高手666666  发表于 2020-3-31 07:12

评分

参与人数 7无忧币 +31 收起 理由
cuicongyuan + 5 赞一个!
wuxin9712 + 5
szmsys + 5 赞一个!
某些人 + 5 赞一个!
minmax + 1 很给力!
yaojy + 5 很给力!
879792799 + 5 很给力!

查看全部评分

201#
发表于 2025-5-21 14:15:22 | 只看该作者
wintoflash 发表于 2025-5-21 12:31
是改名的grub.exe。
访问不了github的话可以下载           (微软应用商店里面可以下)。

谢谢,那就可以不保留。
回复

使用道具 举报

200#
发表于 2025-5-21 08:39:33 | 只看该作者
理论上efi才是所谓的单文件版本吧,偷懒的话直接改bootx64.efi替换esp分区的同名文件就能启动,leagcy启动需要写入boot.img+core.img,才能启动,或者用其他bootloader相关命令加载,leagcy很难做到单文件版。
回复

使用道具 举报

199#
发表于 2025-5-21 08:32:42 | 只看该作者
本帖最后由 mygamexxx 于 2025-5-21 08:34 编辑
my9823 发表于 2025-5-21 08:28
其实我也是,只有上午运气好的时候能访问github,10次i有8次打不开网页的。
uefi下用chainloader 加载grub ...

这个截图中没有说到loadfm文件的作用啊,哦,看到了是GRUB2加载用的命令。后面一句是用ISO形式加载的。

点评

是改名的grub.exe。 访问不了github的话可以下载watt toolkit(微软应用商店里面可以下)。  详情 回复 发表于 2025-5-21 12:31
回复

使用道具 举报

198#
发表于 2025-5-21 08:28:42 | 只看该作者
其实我也是,只有上午运气好的时候能访问github,10次i有8次打不开网页的。
uefi下用chainloader 加载grubfmx64.efi,这个efi就是完整的文件管理器,legacy的话,有个iso里面有个elf文件,可以在其他grub2,比如ventoy的命令行使用 :mulitboot  grubfm.elf来启动,这也算是单文件版吧

点评

这个截图中没有说到loadfm文件的作用啊  详情 回复 发表于 2025-5-21 08:32
回复

使用道具 举报

197#
发表于 2025-5-21 08:21:15 | 只看该作者
mygamexxx 发表于 2025-5-21 08:01
找不到才问,github又比较难访问。


回复

使用道具 举报

196#
发表于 2025-5-21 08:01:28 | 只看该作者
my9823 发表于 2025-5-20 19:34
github主页不是有介绍吗

找不到才问,github又比较难访问。

点评

[attachimg]559011[/attachimg]  详情 回复 发表于 2025-5-21 08:21
回复

使用道具 举报

195#
发表于 2025-5-20 19:34:10 来自手机 | 只看该作者
github主页不是有介绍吗

点评

找不到才问,github又比较验证访问。  详情 回复 发表于 2025-5-21 08:01
回复

使用道具 举报

194#
发表于 2025-5-20 19:22:43 来自手机 | 只看该作者
github主页不是有介绍吗
回复

使用道具 举报

193#
发表于 2025-5-20 17:17:47 | 只看该作者
mygamexxx 发表于 2025-5-20 17:07
搞明白了,/boot/grubfm/config是加载外置菜单的。

再请教一下:loadfm文件有什么作用?
回复

使用道具 举报

192#
发表于 2025-5-20 17:07:57 | 只看该作者
my9823 发表于 2025-5-20 09:51
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420085&extra=page%3D1

搞明白了,/boot/grubfm/config是加载外置菜单的。

点评

再请教一下:loadfm文件有什么作用?  详情 回复 发表于 2025-5-20 17:17
回复

使用道具 举报

191#
发表于 2025-5-20 09:51:04 | 只看该作者
mygamexxx 发表于 2025-5-20 09:11
在哪下载的?好像是ISO文件

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420085&extra=page%3D1

点评

搞明白了,/boot/grubfm/config是加载外置菜单的。  详情 回复 发表于 2025-5-20 17:07
回复

使用道具 举报

190#
发表于 2025-5-20 09:11:52 | 只看该作者
my9823 发表于 2025-5-20 08:29
W大的grubfmx64.efi就是完整版的文件管理器啊?内置了菜单和memedisk.cpio了

在哪下载的?好像是ISO文件

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420085&extra=page%3D1[attachimg]558948[/attachimg]  详情 回复 发表于 2025-5-20 09:51
回复

使用道具 举报

189#
发表于 2025-5-20 08:29:23 | 只看该作者
mygamexxx 发表于 2025-5-20 07:51
请教一下:如何将GRUBFM.EFI封闭成直接使用/efi/grub2/grubfm.cfg。目前下载的好像是使用/boot/grubfm/conf ...

W大的grubfmx64.efi就是完整版的文件管理器啊?内置了菜单和memedisk.cpio了

点评

在哪下载的?好像是ISO文件  详情 回复 发表于 2025-5-20 09:11
回复

使用道具 举报

188#
发表于 2025-5-20 07:51:41 | 只看该作者
本帖最后由 mygamexxx 于 2025-5-20 08:01 编辑

请教一下:如何将GRUBFM.EFI封闭成直接使用/efi/grub2/grubfm.cfg。目前下载的好像是使用/boot/grubfm/config。

点评

W大的grubfmx64.efi就是完整版的文件管理器啊?内置了菜单和memedisk.cpio了  详情 回复 发表于 2025-5-20 08:29
回复

使用道具 举报

187#
发表于 2025-5-11 10:17:03 | 只看该作者
谢谢分享
回复

使用道具 举报

186#
发表于 2025-4-16 17:10:40 | 只看该作者
一直想学怎么封装efi文件。
回复

使用道具 举报

185#
发表于 2024-8-28 10:35:29 | 只看该作者
瓜2很厉害
回复

使用道具 举报

184#
发表于 2024-5-1 22:11:14 | 只看该作者
顶顶就有豆子
回复

使用道具 举报

183#
发表于 2024-2-9 21:27:22 | 只看该作者
學習了,理解中,感謝分享!
回复

使用道具 举报

182#
 楼主| 发表于 2023-10-25 15:47:01 | 只看该作者
rbwrbw 发表于 2023-10-24 12:15
mod 是什么类型的文件???

是模块文件(MODule)
回复

使用道具 举报

181#
发表于 2023-10-24 12:15:47 | 只看该作者
mod 是什么类型的文件???

点评

是模块文件(MODule)  详情 回复 发表于 2023-10-25 15:47
回复

使用道具 举报

180#
发表于 2023-10-24 12:08:17 | 只看该作者
谢谢分享,可以从底层学习 封装经历!!!!
回复

使用道具 举报

179#
发表于 2023-10-24 11:51:02 | 只看该作者
回复

使用道具 举报

178#
发表于 2023-4-4 11:09:00 | 只看该作者
正好需要这方面的,谢谢分享!
回复

使用道具 举报

177#
 楼主| 发表于 2022-11-13 23:04:15 | 只看该作者
青青草 发表于 2022-11-13 17:34
我就是从1楼那个链接中下载的

对比看看你的路径有没有问题


回复

使用道具 举报

176#
发表于 2022-11-13 17:34:37 | 只看该作者
hilsonma 发表于 2022-11-13 12:53
我刚才重启试了一下,我的电脑上是可以的
你可以到1楼我那个链接中下载我使用的这个porteus来试一试。
...

我就是从1楼那个链接中下载的

点评

对比看看你的路径有没有问题 [attachimg]512282[/attachimg]  详情 回复 发表于 2022-11-13 23:04
回复

使用道具 举报

175#
 楼主| 发表于 2022-11-13 12:53:59 | 只看该作者
青青草 发表于 2022-11-13 12:32
用wintoflash的grub2文件管理器,找到porteus.cfg,作为grub2菜单打开。结果不行。

我刚才重启试了一下,我的电脑上是可以的
你可以到1楼我那个链接中下载我使用的这个porteus来试一试。
不同的版本有可能引导方法不一样。

点评

我就是从1楼那个链接中下载的  详情 回复 发表于 2022-11-13 17:34
回复

使用道具 举报

174#
发表于 2022-11-13 12:32:45 | 只看该作者
hilsonma 发表于 2022-11-13 11:59
要看你下载的porteus,我手上有个是这样启动的:
search -n -s -f /porteus/vmlinuz
linux /porteus/vm ...

用wintoflash的grub2文件管理器,找到porteus.cfg,作为grub2菜单打开。结果不行。

点评

我刚才重启试了一下,我的电脑上是可以的 你可以到1楼我那个链接中下载我使用的这个porteus来试一试。 不同的版本有可能引导方法不一样。  详情 回复 发表于 2022-11-13 12:53
回复

使用道具 举报

173#
 楼主| 发表于 2022-11-13 11:59:13 | 只看该作者
本帖最后由 hilsonma 于 2022-11-13 12:00 编辑
青青草 发表于 2022-11-11 10:06
将其中的porteus.cfg放到自动菜单目录,就可以在自动菜单中选择启动

——我对porteus,纯属外行。如何启 ...

要看你下载的porteus,我手上有个是这样启动的:
search -n -s -f /porteus/vmlinuz
linux /porteus/vmlinuz norootcopy nomagic
initrd /porteus/initrd.xz

把这三行放到 porteus.cfg 中,就可以在自动菜单中选择 porteus.cfg 来启动了

点评

用wintoflash的grub2文件管理器,找到porteus.cfg,作为grub2菜单打开。结果不行。  详情 回复 发表于 2022-11-13 12:32
回复

使用道具 举报

172#
发表于 2022-11-11 10:06:46 | 只看该作者
将其中的porteus.cfg放到自动菜单目录,就可以在自动菜单中选择启动

——我对porteus,纯属外行。如何启动porteus,能否详细些?

点评

要看你下载的porteus,我手上有个是这样启动的: search -n -s -f /porteus/vmlinuz linux /porteus/vmlinuz norootcopy nomagic initrd /porteus/initrd.xz  详情 回复 发表于 2022-11-13 11:59
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-6-7 13:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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