无忧启动论坛

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

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

  [复制链接]
31#
 楼主| 发表于 2020-3-8 19:32:34 | 只看该作者
本帖最后由 hilsonma 于 2020-3-9 11:55 编辑
nivigo 发表于 2020-3-8 16:30
我修改了一下可以在win下定制,自测成功,欢迎大家测试。
用法:
1、把tools.7z解压出来,把tools文件夹 ...

感谢分享。

仿照你的方法,我更新了我的方案,添加grub2模块目录和定制程序,做成完整独立的单文件efi定制包。
grub2定制单文件efi.7z (2.43 MB, 下载次数: 900)

下载附件,解压放到任意文件夹
将 build/boot/grub 里的内容清空,换上自己的启动方案的整套文件
    启动方案的主程序需要命名为grub.cfg
按自己的启动方案用到的模块来修改模块清单文件 build/mod.txt
    注意有6个模块是本封装模式要用到的:cpio gzio loopback lzopio memdisk newc
    这6个模块不能缺少
点击执行脚本 制作单文件efi.cmd 就会生成 bootx64.efi .

如果自己没有现成的启动方案,也可以不清空 build/boot/grub 里的内容,直接对 build/boot/grub/grub.cfg 进行修改
根据修改的内容增删相应的文件,并在模块清单文件 build/mod.txt 中增删相应的模块,然后执行脚本。

点评

这个生产的efi启动win8.1x64.vhdx失败(提示硬件改动)而GrubFMx64.efi或GrubFMMultiArch.iso都可以成功,是什么原因?  发表于 2021-6-26 19:51
我下载了你这个打包生成efi,引导只显示grub>界面,看不到菜单,我不知道自己哪里错了?  详情 回复 发表于 2021-2-16 22:01
hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已无法加载iso 、wim文件(仅浏览功能可用),不知问题出在哪?是否还需修改其它内容?  详情 回复 发表于 2020-3-23 13:57
回复

使用道具 举报

32#
发表于 2020-3-21 15:54:17 | 只看该作者
这是制作EFI引导菜单吗,学习一下
回复

使用道具 举报

33#
发表于 2020-3-22 18:55:56 | 只看该作者
迟到了,谢谢更新了
回复

使用道具 举报

34#
发表于 2020-3-23 13:57:17 | 只看该作者
hilsonma 发表于 2020-3-8 19:32
感谢分享。

仿照你的方法,我更新了我的方案,添加grub2模块目录和定制程序,做成完整独立的单文件efi ...

hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已无法加载iso 、wim文件(仅浏览功能可用),不知问题出在哪?是否还需修改其它内容?

点评

你要下载源码,然后自己编译run用的grubfm模块。  详情 回复 发表于 2020-3-27 14:04
Wintoflash的Run,其最新版本是直接引用grub2的grubfm模块来处理文件浏览及打开的,我试了很久,也不知你反馈的问题是什么原因导致,要不你就直接使用他打好包的efi文件吧。 我现在尝试用我的打包方案去打包他的R  详情 回复 发表于 2020-3-25 21:54
回复

使用道具 举报

35#
 楼主| 发表于 2020-3-25 21:54:59 | 只看该作者
2012kwy 发表于 2020-3-23 13:57
hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已 ...

Wintoflash的Run,其最新版本是直接引用grub2的grubfm模块来处理文件浏览及打开的,我试了很久,也不知你反馈的问题是什么原因导致,要不你就直接使用他打好包的efi文件吧。

我现在尝试用我的打包方案去打包他的Run也是有问题,现在也找不到原因。

点评

我就是使用您的打包方案去打包他的Run然后失败,可能要请W大亲自操刀才能解决。另请问H大,Wintoflash大的最新Run能否提供下载?谢谢啦  详情 回复 发表于 2020-3-26 13:53
回复

使用道具 举报

36#
发表于 2020-3-26 13:53:27 | 只看该作者
hilsonma 发表于 2020-3-25 21:54
Wintoflash的Run,其最新版本是直接引用grub2的grubfm模块来处理文件浏览及打开的,我试了很久,也不知你 ...

我就是使用您的打包方案去打包他的Run然后失败,可能要请W大亲自操刀才能解决。另请问H大,Wintoflash大的最新Run能否提供下载?谢谢啦

点评

这是我之前下载保存的,也不知是不是最新  详情 回复 发表于 2020-3-26 14:59
回复

使用道具 举报

37#
 楼主| 发表于 2020-3-26 14:59:04 | 只看该作者
2012kwy 发表于 2020-3-26 13:53
我就是使用您的打包方案去打包他的Run然后失败,可能要请W大亲自操刀才能解决。另请问H大,Wintoflash大 ...

这是我之前下载保存的,也不知是不是最新 run.7z (2.18 MB, 下载次数: 297)
回复

使用道具 举报

38#
发表于 2020-3-27 10:21:01 | 只看该作者
同我之前下载的一样。谢谢H大费心
回复

使用道具 举报

39#
发表于 2020-3-27 14:04:33 | 只看该作者
2012kwy 发表于 2020-3-23 13:57
hilsonma大,按照此法依样画葫芦,想把之前wintoflash的Run模块中的grub2更新到最新版,打包后测试发现已 ...

你要下载源码,然后自己编译run用的grubfm模块。

点评

这个有难度。好像单一模块的功能正逐步被新版Grub2取代,Grub2变得越来越强,都快成了微型操作系统了,谢谢W大的奉献  详情 回复 发表于 2020-3-28 15:00
回复

使用道具 举报

40#
发表于 2020-3-27 14:49:58 | 只看该作者
这个有用,谢谢!
回复

使用道具 举报

41#
发表于 2020-3-28 15:00:05 | 只看该作者
wintoflash 发表于 2020-3-27 14:04
你要下载源码,然后自己编译run用的grubfm模块。

这个有难度。好像单一模块的功能正逐步被新版Grub2取代,Grub2变得越来越强,都快成了微型操作系统了,谢谢W大的奉献

点评

不会的话那你就直接用grub2-filemanager吧  详情 回复 发表于 2020-3-28 16:37
回复

使用道具 举报

42#
发表于 2020-3-28 16:37:08 | 只看该作者
2012kwy 发表于 2020-3-28 15:00
这个有难度。好像单一模块的功能正逐步被新版Grub2取代,Grub2变得越来越强,都快成了微型操作系统了,谢 ...

不会的话那你就直接用grub2-filemanager吧
回复

使用道具 举报

43#
发表于 2020-4-2 01:40:07 | 只看该作者
谢谢分享
回复

使用道具 举报

44#
发表于 2020-4-11 23:45:00 | 只看该作者
很好,已下载了
回复

使用道具 举报

45#
发表于 2020-4-18 20:14:09 | 只看该作者
请问Windows怎么才能从efi引导呢?用BOOTice增加一个启动菜单,设置成从bootx64.efi启动,这个我测试成功了。请问有其他方法吗?比如用系统自带的命令去设置。

点评

要实现efi引导,需要一个efi系统分区,英文缩写esp,esp里需要存放有效的efi启动文件。 esp一般是FAT分区,你用bootice设置从bootx64.efi启动成功就说明已有esp。esp也有了有效的启动文件bootx64.efi 其他方法  详情 回复 发表于 2020-4-18 22:11
回复

使用道具 举报

46#
 楼主| 发表于 2020-4-18 22:11:18 | 只看该作者
本帖最后由 hilsonma 于 2020-4-18 22:24 编辑
2000lg 发表于 2020-4-18 20:14
请问Windows怎么才能从efi引导呢?用BOOTice增加一个启动菜单,设置成从bootx64.efi启动,这个我测试成功了 ...

要实现efi引导,需要一个efi系统分区,英文缩写esp,esp里需要存放有效的efi启动文件。

esp一般是FAT分区,你用bootice设置从bootx64.efi启动成功就说明已有esp。esp也有了有效的启动文件bootx64.efi

其他方法也不外是在esp里放置efi文件,然后将这个efi文件添加到uefi启动序列,如要成为默认启动项就要将其移动到uefi启动序列的第一位。

通常uefi启动序列的第一位是esp里的 \efi\boot\bootx64.efi ,如果是这样的话,也可以将其他的efi启动文件改名为bootx64.efi替换到 \efi\boot\ 中,这样就不再需要手工调整uefi启动序列。

windows自带的设置命令是bcdboot. 首先要给esp分配盘符,比如将esp挂载为K盘,windows系统在C盘,那么只需要在cmd窗口输入 bcdboot c:\windows /s K: /f uefi 然后回车,会自动安装efi启动文件和bcd配置文件到esp.

我这个贴中的启动模板是使用grub2引导,也就是将grub2启动文件bootx64.efi替换到esp 的 \efi\boot 中。bootx64.efi内置菜单,菜单第一项引导 windows分区中的 \Windows\Boot\EFI\bootmgf.efi ,由此实现windows的引导。这种引导方式需要配置一个正确的bcd文件放在windows分区的 \Windows\Boot\EFI
回复

使用道具 举报

47#
发表于 2020-4-18 22:26:51 | 只看该作者
hilsonma 发表于 2020-4-18 22:11
要实现efi引导,需要一个efi系统分区,英文缩写esp,esp里需要存放有效的efi启动文件。

esp一般是FAT ...

多谢。但是比如我在ESP分区中新建了一个文件夹,然后把自己做的bootx64.efi放到这个文件夹里。想设置从这个文件启动,用Bootice是可以设置的。但是想了解一下其中的原理,好像bcdboot不行。

点评

bcdboot负责将efi文件和bcd文件放到esp,如果你用了不能启动说明它不处理uefi启动序列。需要用其他工具处理启动序列。这类工具也多,你用的bootice就是其中一个,同一个作者做的另一个软件xorboot也有这个功能,还有  详情 回复 发表于 2020-4-18 22:37
回复

使用道具 举报

48#
 楼主| 发表于 2020-4-18 22:37:01 | 只看该作者
本帖最后由 hilsonma 于 2020-4-18 23:02 编辑
2000lg 发表于 2020-4-18 22:26
多谢。但是比如我在ESP分区中新建了一个文件夹,然后把自己做的bootx64.efi放到这个文件夹里。想设置从这 ...

bcdboot负责将efi文件和bcd文件放到esp,如果你用了不能启动说明它不处理uefi启动序列。需要用其他工具处理启动序列。这类工具也多,你用的bootice就是其中一个,同一个作者做的另一个软件xorboot也有这个功能,还有diskgenius也有这个功能,其他你要找应该还有,我不一一列举,我自己常用bootice,因其轻便。

我可以肯定的是bcdboot执行efi引导配置成功后,esp里一定会有 \efi\microsoft\boot\bootmgfw.efi ,你可以使用bootice 将这个efi文件手动添加到uefi启动序列并上移到第一位即可实现引导。或者将你的主引导链接到这个efi文件也可以实现引导。


要说原理,就是uefi在检测完成后会将识别到的启动设备添加到nvram的uefi启动序列中,并按顺序逐一尝试引导直至成功或者试完整个序列。
uefi自动识别的就是esp里的 \efi\boot\bootx64.efi ,如果启用了csm,也会识别各存储设备的主引导扇区。

uefi启动序列可以使用bootice之类的工具修改调整。
bcdboot没有这个功能,它只会将bootmgfw.efi和bcd放到esp,如果esp还没有 \efi\boot\bootx64.efi就将bootmgfw.efi复制一份命名为bootx64.efi放到 \efi\boot\

回复

使用道具 举报

49#
发表于 2020-4-19 00:31:25 | 只看该作者
本帖最后由 2000lg 于 2020-4-19 13:14 编辑
hilsonma 发表于 2020-4-18 22:37
bcdboot负责将efi文件和bcd文件放到esp,如果你用了不能启动说明它不处理uefi启动序列。需要用其他工具处 ...


1、默认情况下,Windows开机后,会自动查找ESP分区下的efi\Microsoft\boot\bootmgfw.efi,然后再加载同目录下的BCD,最后加载Windows分区下的\windows\system32\winload.efi,从而引导进入系统。所以使用Bcdboot修复后,应该是恢复这种默认的启动方式。
2、默认情况下,貌似 \efi\boot\bootx64.efi 文件删除也不会影响Windows的启动。您直接把bootx64.efi替换到esp 的 \efi\boot ,说明您之前默认的第一启动是esp里的 \efi\boot\bootx64.efi ,这个应该是自己修改过的吧(应该不是用微软原版光盘安装的,感觉是用wim部署工具把wim镜像部署到某分区,然后efi分区启动文件自己手动添加)?
3、我是按照您这个帖子制作了bootx64.efi(将您提供的grub.cfg中的代码修改成了一下。改成默认的“run /EFI/Microsoft/boot/bootmgfw.efi”,)
我现在想从自己制作的bootx64.efi启动,把bootx64.efi随便放到ESP的自建文件夹,然后用了bootice设置bootx64.efi为第一启动序列,启动是成功了。 不过不清楚的是bootice是用什么命令设置的,很好奇。
回复

使用道具 举报

50#
发表于 2020-4-19 13:29:26 | 只看该作者
我现在想实现的功能是,加载自制的bootx64.efi。这个efi会自动加载Slic 2.5用来激活win7,加载完自动进入windows。目前功能已经实现了。就差最后一步,设置bootx64.efi为第一启动序列。如果用bootice还得手工添加一下启动序列,所以我想实现自动。查了资料后发现,这个操作好复杂,微软的命令行工具应该实现不了。添加新的uefi启动序列,需要编程序,代码好像要很多。
现在有一个退而求其次的方法,还没测试。就是用bcdboot修复一下启动后,恢复成windows的默认引导方式,然后把Esp分区下的efi/microsoft/boot/bootmgfw.efi用自制的bootx64.efi替换。这样应该就能实现我的目的了。但是总感觉怪怪的。

点评

我以前是用chew-wga在部署时激活,不需要每次启动时激活。  详情 回复 发表于 2020-4-19 15:36
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=418717&pid=4026764&fromuid=487838  详情 回复 发表于 2020-4-19 15:21
回复

使用道具 举报

51#
发表于 2020-4-19 15:21:39 | 只看该作者
2000lg 发表于 2020-4-19 13:29
我现在想实现的功能是,加载自制的bootx64.efi。这个efi会自动加载Slic 2.5用来激活win7,加载完自动进入wi ...

http://bbs.wuyou.net/forum.php?m ... &fromuid=487838
回复

使用道具 举报

52#
 楼主| 发表于 2020-4-19 15:36:14 | 只看该作者
2000lg 发表于 2020-4-19 13:29
我现在想实现的功能是,加载自制的bootx64.efi。这个efi会自动加载Slic 2.5用来激活win7,加载完自动进入wi ...

我以前是用chew-wga在部署时激活,不需要每次启动时激活。
回复

使用道具 举报

53#
发表于 2020-4-19 15:52:20 | 只看该作者
wintoflash 发表于 2020-4-19 15:21
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=418717&pid=4026764&fromuid=487838

多谢w大和楼主,就是看了两位的帖子,已经实现加载slic,并成功制作efi单文件。 您发的这个帖子也看过了,有点复杂,代码还要再研究一下,希望能实现添加uefi引导序列的功能。

点评

我发的帖子里面27#有个支持命令行操作UEFI启动项的Bootice。  详情 回复 发表于 2020-4-19 16:11
回复

使用道具 举报

54#
发表于 2020-4-19 16:11:18 | 只看该作者
2000lg 发表于 2020-4-19 15:52
多谢w大和楼主,就是看了两位的帖子,已经实现加载slic,并成功制作efi单文件。 您发的这个帖子也看过了 ...

我发的帖子里面27#有个支持命令行操作UEFI启动项的Bootice。
回复

使用道具 举报

55#
发表于 2020-4-20 13:08:35 | 只看该作者
wintoflash 发表于 2020-4-19 16:11
我发的帖子里面27#有个支持命令行操作UEFI启动项的Bootice。

多谢啦。用bcdedit命令编辑{bootmgr},然后把bootmgr设置成fwbootmgr的第一启动项也可以成功引导自定义目录下的efi文件,这样就可以只用微软的命令,不用bootice了。在楼主和w大的帖子帮助下,使用GRUB2添加slic并做成efi单文件,已经弄好了,昨天成功激活了server2016。
另外还有个问题请教大神,怎么把slic2.2添加到grldr文件中呢?没搜到教程,看w大写过一个grub4dos的外部命令/slic ,但是不太会用,能发个学习的链接吗,谢谢

点评

若把grubx64.EFI 放在\EFI\Boot下,你说的是不是执行这两个命令就可以了? bcdedit /set {fwbootmgr} default {bootmgr} bcdedit /set {bootmgr} path \EFI\Boot\grubx64.EFI  详情 回复 发表于 2020-4-21 21:13
怎么弄的,集成slic.bin?  详情 回复 发表于 2020-4-21 20:25
不清楚。 grub4dos的slic不是我写的。  详情 回复 发表于 2020-4-20 13:36
回复

使用道具 举报

56#
发表于 2020-4-20 13:36:39 | 只看该作者
2000lg 发表于 2020-4-20 13:08
多谢啦。用bcdedit命令编辑{bootmgr},然后把bootmgr设置成fwbootmgr的第一启动项也可以成功引导自定义 ...

不清楚。
grub4dos的slic不是我写的。
回复

使用道具 举报

57#
发表于 2020-4-21 20:25:47 | 只看该作者
2000lg 发表于 2020-4-20 13:08
多谢啦。用bcdedit命令编辑{bootmgr},然后把bootmgr设置成fwbootmgr的第一启动项也可以成功引导自定义 ...

怎么弄的,集成slic.bin?
回复

使用道具 举报

58#
发表于 2020-4-21 20:36:33 | 只看该作者
youlin211 发表于 2020-4-21 20:25
怎么弄的,集成slic.bin?

对。acpi --slic $prefix/dell.bin
回复

使用道具 举报

59#
发表于 2020-4-21 21:13:56 | 只看该作者
2000lg 发表于 2020-4-20 13:08
多谢啦。用bcdedit命令编辑{bootmgr},然后把bootmgr设置成fwbootmgr的第一启动项也可以成功引导自定义 ...

若把grubx64.EFI 放在\EFI\Boot下,你说的是不是执行这两个命令就可以了?
bcdedit /set {fwbootmgr} default {bootmgr}
bcdedit /set {bootmgr} path \EFI\Boot\grubx64.EFI
回复

使用道具 举报

60#
发表于 2020-4-21 23:36:15 | 只看该作者
youlin211 发表于 2020-4-21 21:13
若把grubx64.EFI 放在\EFI\Boot下,你说的是不是执行这两个命令就可以了?
bcdedit /set {fwbootmgr} defa ...

是的。
bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst
bcdedit /set {bootmgr} path "\EFI\Boot\grubx64.EFI"
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 04:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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