无忧启动论坛

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

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

    [复制链接]
1#
发表于 2019-6-11 15:49:35 | 显示全部楼层
看完,晕晕的,搞不定。
如果有这样一个 包含全部类型(包含深度DEEPIN)的启动菜单http://bbs.wuyou.net/forum.php?m ... amp;authorid=514118
让小白根据需要复制删除或修改一些启动选项估计才能玩的了

另外,请教 XORboot可以用在bios启动吗?家里的EFI启动现在用的不错,特别是你的小PE,以后再也不用拔插优盘启动了

点评

完整的范例请参考我的启动U盘 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414574 如果不想制启动U盘可以只看其中的esp文件夹,里面是完整的uefi启动文件包 (包括PE) 我没有装过深度DEEPIN,不了解相关  详情 回复 发表于 2019-6-12 10:43
回复

使用道具 举报

2#
发表于 2019-10-13 16:07:52 | 显示全部楼层
大大在吗?我用XOR启动的增加一个凤凰系统
引导efi文件grubx64.efi,启动后运行到命令行就没了

是那个文件出错呢?

我的grubx64.efi和grub.cfg放在一起


set timeout=6

menuentry ‘Phoenix OS’ --class android-x86 {
search --set=root --file /PhoenixOS/kernel
linux /PhoenixOS/kernel quiet root=/dev/ram0 SRC=/PhoenixOS vga=auto
initrd /PhoenixOS/initrd.img

这个是在deepin的40_启动菜单复制出来的
是语法出错还是iefi文件错误呢?
发现用XORboot的人太少了,网上查找的帮助也太简单了
搞得我都要准备换grub2菜单了

点评

grub2引导到命令行是因为默认路径找不到grub.cfg grub.cfg的位置与grubx64.efi的位置无关,是在编译grubx64.efi时指定的 例如: 上面编译命令中,-p /efi/grub 这个参数就是指定安装路径是 /efi/grub,也就是  详情 回复 发表于 2019-10-14 05:20
回复

使用道具 举报

3#
发表于 2019-10-13 18:50:08 | 显示全部楼层
这两天增加凤凰Os
然后发现grubx64.efi启动需要的grub。cfg是需要放在boot里面
但是深度自己的shimx64.efi的cfg确实放在自己文件夹,就是shimx64.efi和grub.cfg是一起放在deepin文件夹的,是不是这个文件修改过啊?
我后来自己建立一个凤凰文件夹,用深度的shimx64.efi和凤凰的cfg,可以启动凤凰的os

呵呵呵

只是另外的kernel和initrd的命令方式在xor里面没成功,我觉得这个比较直接

点评

xorboot的话请参考下图,这是想象中的设置,我没有测试过,你可以试试,不成功的话就变换一些参数再试 [attachimg]402621[/attachimg]  详情 回复 发表于 2019-10-14 05:44
回复

使用道具 举报

4#
发表于 2019-10-14 09:11:58 | 显示全部楼层
hilsonma 发表于 2019-10-14 05:20
grub2引导到命令行是因为默认路径找不到grub.cfg
grub.cfg的位置与grubx64.efi的位置无关,是在编译grub ...

原来的grubx64.EFI还可以在编译来修改grub.cfg文件的位置吗?

点评

是的,本贴所表述的定制其实就两段代码,一段是编译生成efi文件,一段是编辑配置文件。你可以回头再仔细阅读。 最基本的编译参数是 grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal  详情 回复 发表于 2019-10-14 10:47
回复

使用道具 举报

5#
发表于 2019-10-14 14:06:00 | 显示全部楼层
hilsonma 发表于 2019-10-14 10:47
是的,本贴所表述的定制其实就两段代码,一段是编译生成efi文件,一段是编辑配置文件。你可以回头再仔 ...

谢谢你

开始安装虚拟机,准备学习GRUB2
也是想每个文件夹一个启动
回复

使用道具 举报

6#
发表于 2019-10-14 15:20:08 | 显示全部楼层
本帖最后由 vm669 于 2019-10-14 15:21 编辑

也学习过 極限驅動 的贴子 Windows定制Grub2(包括BIOS和UEFI、自定义Grub2路徑)http://bbs.wuyou.net/forum.php?mod=viewthread&tid=339411

这篇很好,里面有一个
x64.cfg内容示例:
有挺多系统的,应该都是grub2的的吧,直接参考可以吧

前面一大堆看不懂,后面的
menuentry "启动 delta win7" --class windows --class os {
        insmod ntfs
        set root='(hd0,gpt2)'

        clear
        echo "Start Windows"
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

menuentry "local win7" --class windows --class os {
        insmod ntfs
        set root='(hd0,gpt3)'
       

        clear
        echo "Start Windows"
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi

}

————————————————
版权声明:本文为CSDN博主「Beatfan_N」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010875635/article/details/74289971

这些感觉挺好仿写的,可以套用在你的Uboot的ESP里面grub.cfg吧

点评

他这两个菜单项是分别引导两个分区内的 /efi/microsoft/boot/bootmgfw.efi,这两个分区应该都是efi分区 其实没有必要多个efi分区,直接引导每个windows分区的 \Windows\Boot\EFI\bootmgfw.efi 就可以了 比如可以把  详情 回复 发表于 2019-10-14 18:02
回复

使用道具 举报

7#
发表于 2019-10-14 20:12:04 | 显示全部楼层
hilsonma 发表于 2019-10-14 18:02
他这两个菜单项是分别引导两个分区内的 /efi/microsoft/boot/bootmgfw.efi,这两个分区应该都是efi分区
...

是这样吗?我以为他的 set root='(hd0,gpt2)'
是指定启动分区呢?

我以后将说分区:EFI,win7,win8,win10,DEEPIN,。。
然后用 set root='(hd0,gpt2)' 这样来指定启动不同系统。
============

如果我想前面三个分别启动7,8,10
对应的cfg中你的这句
menuentry "0.Windows 7" --hotkey=0 {
  chainloader /efi/microsoft/bootx64.efi
}
menuentry "0.Windows 8.1" --hotkey=0 {
  chainloader /efi/microsoft/bootx64.efi
}
menuentry "0.Windows 10" --hotkey=0 {
  chainloader /efi/microsoft/bootx64.efi
}
是不是要三次都是bootx64.efi,那怎么分辨是哪个磁盘分区,不是用et root='(hd0,gpt**)'这句吗?

然后
menuentry "ubuntu16.04 x86" --class ubuntu --class os {
        insmod ext2
        set root='(hd0,gpt5)'
        linux /vmlinuz ro root=/dev/sda5
        initrd /initrd.img
        echo "Start Ubuntu 16.04"
}
这句准备修改一下用来启动deepin


还没搞明白grub2,只是初步想法,

点评

set root='(hd0,gpt2)' 是指定启动分区 但我的操作通常不用指定分区,都是根据启动文件来查找启动分区。 win7, win8, win10 都存在 \Windows\Boot\EFI\bootmgfw.efi 分别复制改名或直接改名, win7的叫做 \Windo  详情 回复 发表于 2019-10-14 20:27
回复

使用道具 举报

8#
发表于 2019-10-14 20:53:09 | 显示全部楼层
本帖最后由 vm669 于 2019-10-14 21:15 编辑
hilsonma 发表于 2019-10-14 20:27
set root='(hd0,gpt2)' 是指定启动分区
但我的操作通常不用指定分区,都是根据启动文件来查找启动分区 ...


这个https://bbs.deepin.org/forum.php?mod=viewthread&tid=133379

对头,就是这样,你厉害


我刚好看到这边文章“bootmgfw.efi 任意存放 , 引導不同的 BCD”

但是你更厉害,bootmgfw.efi  这个文件还能改名
回复

使用道具 举报

9#
发表于 2019-10-15 08:41:23 | 显示全部楼层
hilsonma 发表于 2019-10-14 20:27
set root='(hd0,gpt2)' 是指定启动分区
但我的操作通常不用指定分区,都是根据启动文件来查找启动分区 ...

不要忘了每个windows分区都要配置一个bcd文件,就放在各自的 \Windows\Boot\EFI\ 文件夹

我觉得还是应该放在EFI区,系统分区经常重装再搞BCD麻烦
我觉得应该像你之前思路启动文件统一放在EFI区,
各自系统盘怎么折腾都没事,照样能启动到win系统

点评

正是为了统一的efi区,不管哪台电脑,多次重装,efi区引导都不用变动。 而每次重装系统或每台不同的电脑,bcd都是不同的,所以我建议bcd放在windows分区跟bootmgfw.efi放一起。 efi区的启动文件(无论是xorboot还  详情 回复 发表于 2019-10-15 13:18
回复

使用道具 举报

10#
发表于 2019-10-16 11:15:24 来自手机 | 显示全部楼层
本帖最后由 vm669 于 2019-10-16 12:29 编辑

基本成功了,只差kernel的命令行,真的不懂了

XOR方式:
DEEPIN启动:/EFI/deepin/shimx64.efi --> /EFI/deepin/grubx64.efi --> /EFI/ubuntu/grub.cfg --> 根分区的vmlinuz-initrd
凤凰OS启动:/EFI/Phoenix/grubx64.efi -->/EFI/BOOT/grub.cfg --> 根分区D的kernel-initrd
凤凰OS用命令行

出错



XOR的DEEPIN启动菜单再增加凤凰OS和win10

凤凰OS是按照官网方式增加,没有问题

添加Phoenix OS启动项
1. 重启进入到Deepin中,为Phoenix OS添加Grub的引导项,首先修改/etc/grub.d/40-custom文件,填入下列内容,并保存:
menuentry ‘Phoenix OS’ --class android-x86 {
search --set=root --file /PhoenixOS/kernel
linux /PhoenixOS/kernel quiet root=/dev/ram0 SRC=/PhoenixOS vga=auto
initrd /PhoenixOS/initrd.img
}
2. 修改/etc/default/grub文件,注释下列两行(在两行前加#),并保存;
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=TRUE
3. 生成新的Grub菜单;
通过下列命令行生成新的Grub菜单:
sudo grub-mkconfig -o /boot/grub/grub.cfg

win10是采用BCD方式,
修改 \Windows\Boot\EFI\bootmgfw.efi为 \Windows\Boot\EFI\bootmgfw10.efi,
再用BOOTICEx64增加BCD,放在windows分区跟bootmgfw10.efi放一起。
再到DEEPIN按照上面方式增加
menuentry "2.Windows 10" "/Windows/Boot/EFI/bootmgfw10.efi" --hotkey=2 {
        search --no-floppy --set --file $2
        chainloader $2
}
可以启动,但是启动时有暂停显示一个出错画面

不管它,一会儿还是可以进入win10的。不知道是菜单文件问题还是系统问题,这两天win10系统有点慢,经常鼠标不能动

感谢大侠,至此好像等于在不损启动的基础上初步学会照抄grub菜单
应该是这样吧。目前算是XOR嵌套grub,但是grub是DEEPIN的,接下去需要改为全部grub启动


回复

使用道具 举报

11#
发表于 2019-10-16 12:36:35 | 显示全部楼层
再开一个帖子请教大侠
1、如果我不修改efi定义cfg文件位置,是不是cfg必须放在efi-boot里面。?
2、如果像deepin这样自己修改的shimx64.efi,那就必须按他的方式放,这个名字好像是你说过的安全启动方面的?
3、如果我清空目前的EFI区文件,要改为grub启动,是不是要安装grub启动?怎么安装?看网上说的修复启动那样,好像BOOTICEx64就可以,但是哪个grub4dos是grub还是grub2?还有其他方式吗?
4、如果按grub2启动,那就是只要一个grub.cfg文件了,放在boot里面,那么menuentry前面的一大堆的那些代码是一定要的还是可以不要,只要timeou时间简单几个就行?。看得头晕
5、假如我用你的uboot的efi放进去,需要注意什么?你的cfg文件也是放在grub里面的


点评

对grub2来说,不存在修改不修改,配置文件应在位置是在编译efi文件时指定了的。 是你自己编译生成的efi文件,你会知道,这个位置是由 -p 参数指定的,如果忘记了或者是别人编译生成的efi文件,可以进入grub2命令  详情 回复 发表于 2019-10-16 18:20
回复

使用道具 举报

12#
发表于 2019-10-23 10:37:33 | 显示全部楼层
hilsonma 发表于 2019-10-17 14:06
为什么要装win7呢,如果觉得win10卡可以尝试装这个win8.1 http://bbs.wuyou.net/forum.php?mod=viewthrea ...


再用dism或wim工具将安装镜像展开到windows分区,最后新建一个bcd文件覆盖到efi区 \efi\microsoft\boot\bcd
完成这些操作后重启会进入系统安装设置画面,如卡停在硬件不适合按确定重启,这时不要理会,按Shift+F10, 会进入命令行,输入 cd oobe 回车后,再输入 msoobe 回车,就会出现用户设置界面,全部设置完成再重启就可以了

就在上周家里本本win10用了很久太慢,重装系统,不知道是因为SSD原因还是什么ESP是xorboot启动问题,我使用winnetsetup安装了win7 win8.1 win10 5-6个版本,都在安装后重启后停一个画面,
后来网上看到这个oobe方法,用了但是没成功。
最后用了一个ghost版本的win7才可以,晕死了。本来我都把ghost版本的安装系统删光了。幸亏还留一个在摸一个U盘的里。

那个错误提示画面在手机里好像删了,没找到。

大大知道这个是为什么吗?
不知道以后还会遇到吗?当初刚安装SSD时时用pa迁移系统的,等于这次是第一次在SSD安装系统

点评

我不知道你这个是什么原因。 不知道你的SSD是gpt还是mbr,如果是mbr就一定要bios启动完成安装设置直至能正常进入系统才可以转为uefi启动的。  详情 回复 发表于 2019-10-23 13:44
回复

使用道具 举报

13#
发表于 2019-11-4 21:23:15 | 显示全部楼层
家里本本是UEFI,办公室是BIOS。
来回折腾有时有点乱
问大大一个问题。这个做好的grub2启动U盘在BIOS启动的电脑上可以启动吗?

点评

本贴分享的是使用grub2定制uefi启动,主要是讲启动文件(efi文件)和配置文件(菜单文件)的生成。没有涉及bios启动。 grub2也可以在bios平台使用,不过我在bios平台一般使用grub4dos. uefi和bios双启动u盘可参考h  详情 回复 发表于 2019-11-5 16:00
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-2 17:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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