无忧启动论坛

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

[分享] 使用Grub2定制UEFI启动 (bootx64.efi)

    [复制链接]
跳转到指定楼层
#
发表于 2019-3-21 07:49:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hilsonma 于 2020-4-7 17:48 编辑

使用grub2做为uefi平台主引导的最大特色是:
当无法通过菜单项正常引导指定系统时,可以进入一个文件浏览菜单项,查找所有可能的引导项,以实现引导。
如果是grub2熟手,还可以临时修改菜单项,及进入grub2命令行。

附件是我定制的一个范例,下面附两张效果图。
启动菜单中第一项是默认启动Windows
第二项是启动efi区pe文件夹的PE镜像
第三项是将所有分区下的pe文件夹里的文件列为自动菜单,一键启动wim镜像。
自动菜单中第一项即两点开头那一项即是返回上一层文件夹,通过此项可浏览所有磁盘文件。
efi.7z (987.04 KB, 下载次数: 1837)

完整的范例请参考我的启动U盘 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414574
如果不想制启动U盘可以只看其中的esp文件夹,里面是完整的uefi启动文件包 (包括PE)

UEFI开机菜单(grub2菜单)


WIM/EFI自动菜单(grub2文件浏览极简版)


现在UEFI平台的启动,一般都是UEFI引导第一个fat分区或fat32分区的 \efi\boot\bootx64.efi ,再由bootx64.efi 启动操作系统。
之前分享了一个用xorboot来定制bootx64.efi的方法。http://bbs.wuyou.net/forum.php?mod=viewthread&tid=413596

下面分享使用Grub2来定制bootx64.efi 的方法。这个方法主要来自Beatfan_N 的博文。https://blog.csdn.net/u010875635/article/details/74289971
也学习过 極限驅動 的贴子 Windows定制Grub2(包括BIOS和UEFI、自定义Grub2路徑)http://bbs.wuyou.net/forum.php?mod=viewthread&tid=339411
还有其他前辈的贴子,不再一一列举。

定制开始
=======

首先下载grub2
官网下载: ftp://ftp.gnu.org/gnu/grub  选择 grub-x.xx-for-windows.zip (不推荐,因为没有wimboot模块)
建议下载 wintoflash 的新版:点我下载

下载解压后,建议将解压文件夹 grub-2.04-for-windows (官网版本) 或 builds-master (wintoflash新版) 更名为grub2.

在解压文件夹下新建一个文本文档 ,内容如下:

  1. @echo off
  2. :: 设置当前目录为脚本所在目录
  3. pushd %~dp0

  4. set format=x86_64-efi
  5. set prefix=/efi/grub
  6. set output=grubx64.efi
  7. set modules=part_msdos part_gpt fat exfat ntfs ext2 normal chain configfile search probe regexp test wimboot halt reboot help linux map blocklist vhd ntboot
  8. grub-mkimage -O %format% -p %prefix% -o %output% %modules%
复制代码

注意区分大小写,保存类型为所有文件,文件名为 z.cmd ,一定要将保存类型改为所有文件,不能是文本文档,它其实是windows脚本文件。

附件有我做好的 z.cmd ,不想自己做的话就下载附件解压放到grub2文件夹
grub2.7z (239.25 KB, 下载次数: 1081)

运行 z.cmd ,grub2文件夹里会产生一个 grubx64.efi 文件

如果下载的是wintoflash的grub2,会有一个build_grub.bat ,使用这个脚本会生成三个文件:64位efi的grubx64.efi 、32位efi的grubia32.efi、实模式的core.img 。全部包含所有的模块。默认prefix是\boot\grub,需要修改的话可使用notepad2或notepad++之类的工具。

在grub2 文件夹下新建一个文本文档 ,内容如下:
  1. set default=0
  2. set fallback=2
  3. set timeout=5

  4. menuentry "0.Windows" "/Windows/Boot/EFI/bootmgfw.efi" --hotkey=0 {
  5.         search -s -f $2
  6.         chainloader $2
  7. }
  8. menuentry "1.WinPE" --hotkey=1 {
  9.         export grub_find=/pe/pe.wim
  10.         configfile $prefix/grubfm.cfg
  11. }
  12. menuentry "2.Grubfm" --hotkey=2 {
  13.         export grub_find=/pe
  14.         configfile $prefix/grubfm.cfg
  15. }
  16. menuentry "3.Reboot" --hotkey=3 {reboot}
  17. menuentry "4.Halt" --hotkey=4 {halt}
  18. menuentry "Porteus" "/porteus/vmlinuz" {
  19.         search -s -f $2
  20.         linux $2 norootcopy nomagic
  21.         initrd /porteus/initrd.xz
  22. }
  23. menuentry "Boot WIM" "/test.wim" {
  24.         search -s wimroot -f $2
  25.         wimboot @:bootmgfw.efi:$prefix/wimboot/bootmgfw.efi \
  26.                         @:bcd:$prefix/wimboot/bcd \
  27.                         @:boot.sdi:$prefix/wimboot/boot.sdi \
  28.                         @:boot.wim:($wimroot)$2
  29. }
  30. menuentry "Boot ISO" "/test.iso" {
  31.         search -s -f $2
  32.         map $2
  33. }
  34. menuentry "Boot VHD" "/test.vhd" {
  35.         search -s -f $2
  36.         ntboot -e $prefix/wimboot/bootmgfw.efi -s $prefix/wimboot/boot.sdi $2
  37. }
  38. menuentry "Ntboot VHD" "/test.vhd" {
  39.         search -s -f $2
  40.         ntboot -e $prefix/wimboot/bootmgfw.efi -s $prefix/wimboot/boot.sdi $2
  41. }
复制代码

注意,保存类型为所有文件,文件名为 grub.cfg ,一定要将保存类型改为所有文件,不能是文本文档,它其实是grub2配置文件(grub2菜单)。
上面附件中也有我做好的 grub.cfg 和grubx64.efi 。

将grubx64.efi 放到第一个fat/fat32分区(也就是esp分区)中的文件夹 \efi\boot\ ,改名为 bootx64.efi
将grub.cfg 放到第一个fat/fat32分区(也就是esp分区)中的文件夹 \efi\grub\
重新启动后就会出现grub2菜单。

定制结束
========

要自动菜单浏览文件 需要加上grub2fm
要一键启动wim镜像 需要加上 wimboot
这些 efi.7z 都包含了。
如果启动windows有问题请运行重建win引导脚本.http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414828

注意,如果开启了安全启动(secureboot)的话要关掉,因为这个bootx64.efi是不能过安全启动的。

如何过安全启动
==============
将efi分区 \efi\boot\bootx64.efi 改名为 grubfmx64.efi
securebootloader.7z (529.04 KB, 下载次数: 723)
下载securebootloader解压
将解压得到的4个文件放到efi分区 \efi\boot\

重新启动后首先会进入 Shim 验证失败的界面
按任意键进入导入证书的界面
选择 Enroll key from disk
找到 GRUBFM.cer
选择 Continue
选择 Yes
在之后的菜单中选择 Reboot ,重启计算机。
注意:压缩文件里面的 EFI 文件不可改名,不可以放到其他文件夹下,不可修改内容,否则无效。GRUBFM.cer 为证书文件,可以改名,不可修改内容。

导入证书后会保存在nvram中,只要不清nvram,以后启动不再出现验证失败画面,直接过安全启动。
=============================================================

以上分享的菜单等待时间是5秒,为了不影响开机速度,所有菜单的等待时间我都设定为1秒,如果不是启动默认项就狂按上下箭头键吧。

20190729更新:
1.去除证书模块
2.默认镜像文件夹由\wim 改为\pe

20190527更新:
1.安全启动(secureboot)支持

20190526更新:
1.定制脚本自动获取管理员权限,自动定位脚本所在文件夹
2.定制脚本包含证书模块、文件管理相关模块、wimboot相关模块
3.可将wim镜像和efi程序统一放在任意磁盘的 \wim 文件夹中,WIM/EFI菜单项自动列表一键启动

评分

参与人数 22无忧币 +94 收起 理由
某些人 + 5 赞一个!
csnnan + 1 很给力!
2011cwj6958 + 5 很给力!
wuxin9712 + 5
isakmp + 1
hl7741 + 1 神马都是浮云
hx200000 + 1 很给力!
2012kwy + 5 赞一个!
纯脆entropy + 5
2011yaya2007777 + 5 赞一个!
freesoft00 + 5
北冥有鱼 + 5
sea2moon + 5 请教导入证书后会不会覆盖原来的文件,我的.
2010mkjx + 5 赞一个!
xmzhqw + 5 赞一个!
vrboxing + 5 赞一个!
ksafei + 5 很给力!
shan + 5
brook + 5
心零 + 5 赞一个!
chishingchan + 5 为技术奉献精神点赞!
有阴也有阳 + 5 简明、扼要、实用!

查看全部评分

346#
发表于 昨天 09:57 | 只看该作者
学习了!谢谢
回复

使用道具 举报

345#
发表于 2024-4-26 09:35:16 | 只看该作者
感谢楼主分享。。。。。。。。
回复

使用道具 举报

344#
发表于 2024-4-26 08:18:49 | 只看该作者

感谢楼主分享。。。。。。
回复

使用道具 举报

343#
发表于 2024-3-11 13:15:52 | 只看该作者
已经有grub4,lz
回复

使用道具 举报

342#
发表于 2024-3-8 18:29:59 | 只看该作者

谢谢分享
回复

使用道具 举报

341#
发表于 2024-1-24 13:03:29 | 只看该作者
谢谢楼主分享,长知识了!
回复

使用道具 举报

340#
发表于 2024-1-5 14:13:08 | 只看该作者
谢谢分享,正需要双系统启动,感谢
回复

使用道具 举报

339#
发表于 2023-5-20 07:21:52 | 只看该作者
学习一下感谢分享
回复

使用道具 举报

338#
发表于 2023-5-19 15:30:06 | 只看该作者
1.安全启动(secureboot)支持 必须支持
回复

使用道具 举报

337#
发表于 2023-4-24 14:46:11 | 只看该作者
学习了!谢谢
回复

使用道具 举报

336#
发表于 2023-4-10 21:27:51 | 只看该作者
hilsonma 发表于 2019-10-14 20:27
set root='(hd0,gpt2)' 是指定启动分区
但我的操作通常不用指定分区,都是根据启动文件来查找启动分区 ...

时隔多年再来寻找这段指导,再次感谢大大

目前的本本和台式老机安装deepin和mint已经可以自动安装显卡等驱动,完美支持
目前还是多系统,win10+win8.1VHD+linux,
为了一级菜单多系统启动,再次寻找大大这段回复,翻了好几个帖子,终于找到,
回复

使用道具 举报

335#
发表于 2023-2-25 13:31:21 | 只看该作者
支持
回复

使用道具 举报

334#
发表于 2022-12-11 10:15:28 | 只看该作者
感谢分享。
回复

使用道具 举报

333#
发表于 2022-11-18 18:36:14 | 只看该作者
感谢分享,学习了
回复

使用道具 举报

332#
发表于 2022-11-3 08:23:05 | 只看该作者
多谢大神学习了啊
回复

使用道具 举报

331#
发表于 2022-7-19 22:43:58 | 只看该作者
感谢分享
回复

使用道具 举报

330#
发表于 2022-6-2 13:17:38 | 只看该作者
谢谢分享
回复

使用道具 举报

329#
发表于 2022-5-29 23:20:40 | 只看该作者
请问下我要显示中文界面要怎么做?
回复

使用道具 举报

328#
发表于 2022-4-24 11:07:50 | 只看该作者
谢谢分享
回复

使用道具 举报

327#
发表于 2022-3-30 19:00:30 | 只看该作者
suge 发表于 2019-6-17 10:48
你好,按照你的方法,背景图折腾一翻,搞好了。还有一个问题,在 z.cmd中加了font模块,在grub文件夹中加 ...

说的不错谢谢
回复

使用道具 举报

326#
发表于 2022-3-30 18:54:57 | 只看该作者
hilsonma 发表于 2019-6-12 10:34
首先制作一张PNG格式的图片,分辨率最好是"1024x768"以保证较好的兼容性。然后将这张图片放到"$prefix/th ...

看看看看看看
回复

使用道具 举报

325#
发表于 2022-3-16 09:41:07 | 只看该作者
谢谢分享
回复

使用道具 举报

324#
发表于 2021-12-29 10:05:37 | 只看该作者
学习了!谢谢
回复

使用道具 举报

323#
发表于 2021-12-15 11:20:15 | 只看该作者
正在学着打包,不知错在哪里少了什么模块,用现成就没问题。最近在恶补这些知识,发现越补漏洞越多,越感到捉襟见肘不够用,走一步算一步。感谢H大回复。
回复

使用道具 举报

322#
 楼主| 发表于 2021-12-15 09:48:45 | 只看该作者
2012kwy 发表于 2021-12-15 08:53
请问楼主,那可不可以把一个EFI文件解包或提取?用什么方法?

我不知道这样的方法。只会用grub2新建一个efi文件。
回复

使用道具 举报

321#
发表于 2021-12-15 08:53:33 | 只看该作者
请问楼主,那可不可以把一个EFI文件解包或提取?用什么方法?

点评

我不知道这样的方法。只会用grub2新建一个efi文件。  详情 回复 发表于 2021-12-15 09:48
回复

使用道具 举报

320#
发表于 2021-12-5 19:51:45 | 只看该作者
没办法下载附件
回复

使用道具 举报

319#
发表于 2021-7-10 21:40:34 | 只看该作者
感谢分享
学习到了
回复

使用道具 举报

318#
发表于 2021-6-9 09:43:58 | 只看该作者
太好了,能下那个过安全启动的附件,我就搞定了,参照了下方法,我直接把refind的所有东西复制到EFI\boot\下,然后把refind_x64.efi改名为grubfmx64.efi,相当于开机直接bootx64.efi→refind

前期主要是refind无法用hashtool(提示无效的二进制文件),导致无法用preloader,自签名又搞不来(其实后面搞出来了,只是我找到的那个mokmgr导入证书好像没用),绕了好多弯路,现在终于不用姨妈红了

最后衷心感谢楼主的教程、以及那个制作出bootx64签名+证书的人
回复

使用道具 举报

317#
发表于 2021-6-7 08:51:08 | 只看该作者
谢谢分享……主要还是安全启动还没搞懂……我surface pro3(红屏很烦)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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