无忧启动论坛

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

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

  [复制链接]
31#
 楼主| 发表于 2020-12-22 11:57:16 | 显示全部楼层
seashipseaship 发表于 2020-12-21 18:01
学习中,能介绍下.efi的文件格式不!

我对 .efi 的文件格式也不甚了解。我只知道uefi引导需要 .efi 文件。之前我只知道可以用xorboot这个软件生成bootx64.efi,后来知道可以用grub2来生成bootx64.efi,之后就一直使用grub2来生成,本贴就是其中一个应用例子。

现在也可以下载grub4dos的.efi文件,不过还在完善中,一些功能还需要等待。

类似的引导程序还有refind、clover等,都是通过菜单文件来配置启动,efi文件是现成的。

我目前只发现grub2可以在一定程度上定义 .efi 文件, 其他的都只能使用现成的 .efi 文件。

要使用某efi文件做uefi主引导,需要将该efi文件命名为bootx64.efi 放在u盘fat16/fat32分区的 \efi\boot\ 文件夹中,或者将该efi文件命名为bootmgfw.efi 放到硬盘efi分区的 \efi\microsoft\boot\ 文件夹中,在某些主板上,也支持命名为bootx64.efi 放在硬盘efi分区的 \efi\boot\ 文件夹中。也有个别主板,支持各种格式的分区引导,支持各种位置的各种efi文件名,只需要在uefi固件设置中指定要引导的efi文件就可以了。

efi引导文件除了作为主引导外,也可以被其他efi文件链接引导,这种情况一般在上级引导的菜单配置中设定。

efi文件也不一定是引导文件,还有一些是驱动文件,需要在某引导文件中挂载使用,实现某种驱动。例如截屏驱动,ntfs文件系统驱动,鼠标驱动等。
回复

使用道具 举报

32#
 楼主| 发表于 2021-1-12 15:55:38 | 显示全部楼层
$prefix 表示 grub.cfg 所在文件夹
也就是说,上述菜单要求 字体文件 unicode.pf2 放在 grub.cfg 所在文件夹的子文件夹 fonts 之中
主题文件放在 grub.cfg 所在文件夹的子文件夹 themes 的子文件夹 elegant 之中
回复

使用道具 举报

33#
 楼主| 发表于 2021-2-17 06:18:36 | 显示全部楼层
AndyChen 发表于 2021-2-16 22:25
文件“grub2 生成 efi 引导 ” 是我修改后的,生成的efi有问题,能帮我看看,我的是哪里错了?

我测试没有发现问题


回复

使用道具 举报

34#
 楼主| 发表于 2021-2-17 06:35:13 | 显示全部楼层
本帖最后由 hilsonma 于 2021-2-17 07:12 编辑
AndyChen 发表于 2021-2-16 22:25
文件“grub2 生成 efi 引导 ” 是我修改后的,生成的efi有问题,能帮我看看,我的是哪里错了?

看了一下你的菜单内容,共3项

默认项是进入自动还原的B版vhd,不需密码
另两项需要输入用户名和密码,一个是A版vhd,另一个是pe

我的建议是,使用自定义命令代替密码,自定义命令只有你自己知道,相当于密码,普通用户只能通过菜单进入默认项,也就是自动还原的B版vhd.
你告诉我 A版vhd / B版vhd / pe 的文件名和路径,我会告诉你我是怎样配置菜单的,在达成你的要求的同时应该会更便于操作。

例如:
假设
A版vhd的文件路径是 /VHD/WIN10_A_CHILD.VHDX
B版vhd的文件路径是 /VHD/WIN10_B_CHILD1.VHDX 和 /VHD/WIN10_B_CHILD2.VHDX
pe的文件路径是 /efi/WINPE/WINPE.WIM

那么我的菜单配置如下:
source $prefix/run/run.cfg

function andy {run /VHD/WIN10_A_CHILD.VHDX;}
function pe {run /efi/WINPE/WINPE.WIM;}
terminal_output gfxterm
loadfont unicode
theme=elegant/theme.txt
timeout=1
menuentry "1.WIN10 OS B AUTO RESTORE"   --class windows  --hotkey=1 {
        if search -n -s -f /VHD/CHILD.2; then
                xntboot /VHD/WIN10_B_CHILD2.VHDX
        elif search -n -s -f /VHD/WIN10_B_CHILD1.VHDX; then
                xntboot /VHD/WIN10_B_CHILD1.VHDX
        fi
}
menuentry "2.Reboot"    --class reboot   --hotkey=2 {reboot;}


这样,开机默认进B版vhd
开机时按上下箭头键,出现grub2菜单并等待选择
这时,按c进入命令行,
输入andy回车可进入A版vhd
或者输入pe回车可进入pe

如果不想开机时按上下箭头键,就将timout=1改为3以上,比如你原来的timout=10,这样开机时会出现grub2菜单并等待若干秒

使用自定义命令与使用密码相比,减少了键盘输入,所以应该会更简便,同时也达到了屏蔽非授权用户的目的,因为非授权用户并不知道自定义命令,菜单上也没有显示。

点评

是 xntboot,还是 ntboot ?  详情 回复 发表于 2021-2-17 11:49

评分

参与人数 1无忧币 +5 收起 理由
AndyChen + 5 很给力!

查看全部评分

回复

使用道具 举报

35#
 楼主| 发表于 2021-2-17 14:49:30 | 显示全部楼层
本帖最后由 hilsonma 于 2021-2-17 14:54 编辑
AndyChen 发表于 2021-2-17 11:57
启动不了,看下图

can't find command 'run' 说明没有run命令
这是我自定义的命令,在run文件夹中。
你要使用我的整个模板,然后修改其中的 grub.cfg 就可以了
成功之后再尝试换字体及其他修改。

附件是根据你的菜单修改过的模板,以及生成的单文件,我试过应该是没有问题的。

efi_one.7z (3.32 MB, 下载次数: 149)

bootx64.7z (2.14 MB, 下载次数: 122)

你原菜单中自定义命令是有大写的,我暂时照搬。
但我建议全部换成小写,并且尽量将命令名缩短,以方便输入。
例如 Andychen 改为 ac 或 andy
PE 改为 pe

注意grub2中是大小写不同的,有区分的。

评分

参与人数 1无忧币 +5 收起 理由
AndyChen + 5 很给力!

查看全部评分

回复

使用道具 举报

36#
 楼主| 发表于 2021-2-17 15:04:30 | 显示全部楼层
AndyChen 发表于 2021-2-17 11:49
是 xntboot,还是 ntboot ?

是xntboot,我自定义的,引用ntboot并添加了参数,如果你将xntboot直接改成ntboot 是会缺少参数的。
你可以打开 build\boot\grub\run\run.cfg 来看,里面就定义了 xntboot 命令以及其他命令,主命令是run。

评分

参与人数 1无忧币 +5 收起 理由
AndyChen + 5 很给力!

查看全部评分

回复

使用道具 举报

37#
 楼主| 发表于 2021-2-17 15:27:16 | 显示全部楼层
AndyChen 发表于 2021-2-17 11:45
source $prefix/run/run.cfg

function AndyChen {run /WIN10_A_CHILD.VHDX;}

function AndyChen {run /WIN10_A_CHILD.VHDX;}
建议命令名改为小写并缩短,如
function andy {run /WIN10_A_CHILD.VHDX;}

function PE {run /W10PE64.WIM;}
同样建议命令名改为小写

default=0
这一句本身是默认的,不需要,只有默认不是0时才需要
所以我们只要将默认项放到第一位就可以了,不需要这一句

ntboot /VHD/WIN10_B_CHILD1.VHDX
不能将xntboot改成ntboot,因为xntboot是自定义命令,是添加了参数的ntboot,如果改成ntboot就需要添加相应的参数

elif search -n -s -f /VHD/CHILD.2; then
在判断使用哪一个副本时,存在CHILD.2就使用副本2,不存在CHILD.2就不需找CHILD.1了,直接找副本1并启动,所以并不是两个标志文件都要找的,找其中一个就可以了。我们始终是使用同一个标志文件,只是通过将标志文件改名来达到启动不同副本的目的。

评分

参与人数 1无忧币 +5 收起 理由
AndyChen + 5 很给力!

查看全部评分

回复

使用道具 举报

38#
 楼主| 发表于 2022-2-19 01:55:49 | 显示全部楼层
2011yfrui 发表于 2022-2-18 10:02
hilsonma 老师:你好!
你的文章很受益!我在 efi 系统上试了GRUB_v2.04和GRUB_v2.06俩个版本,按照文章中 ...

注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
这6个模块不能缺少
回复

使用道具 举报

39#
 楼主| 发表于 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
回复

使用道具 举报

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

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

点评

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

使用道具 举报

41#
 楼主| 发表于 2022-11-13 23:04:15 | 显示全部楼层
青青草 发表于 2022-11-13 17:34
我就是从1楼那个链接中下载的

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


回复

使用道具 举报

42#
 楼主| 发表于 2023-10-25 15:47:01 | 显示全部楼层
rbwrbw 发表于 2023-10-24 12:15
mod 是什么类型的文件???

是模块文件(MODule)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-4 03:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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