无忧启动论坛

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

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

    [复制链接]
发表于 2019-9-29 19:50:37 | 显示全部楼层
楼主你好,我下载了你那个uboot测试,那个把所有PE放到pe文件夹,自动加载菜单太好用了,可是我测试以前一直正常的几个PE,很多都启动不了,只有其中一个可以成功,哎,是什么原因啊?其它我只想要在我现在的GRUB2的基础上添加那个微软认证。有没有简单的方法?

点评

[attachimg]401917[/attachimg]  详情 回复 发表于 2019-9-29 21:20
回复

使用道具 举报

 楼主| 发表于 2019-9-29 21:20:59 | 显示全部楼层
本帖最后由 hilsonma 于 2019-9-29 21:43 编辑
zck132 发表于 2019-9-29 19:50
楼主你好,我下载了你那个uboot测试,那个把所有PE放到pe文件夹,自动加载菜单太好用了,可是我测试以前一 ...


我下载的pe都能成功启动,你的什么情况我不清楚。
有两点是确定的:
引导程序是64位的,只能引导64位的pe wim镜像。32位的pe wim镜像要么在bios平台下引导,要么在32位efi平台使用32位引导程序引导。
目前只是使用了wintoflash的wimboot模块实现wim镜像的引导,iso镜像暂未能在grub2下直接引导。

关于添加认证贴中已经说了,请仔细再看。

secureboot.jpg

点评

请教一下,是不是vhd也不能引导?  详情 回复 发表于 2019-10-1 06:17
回复

使用道具 举报

发表于 2019-10-1 06:17:08 | 显示全部楼层
hilsonma 发表于 2019-9-29 21:20
我下载的pe都能成功启动,你的什么情况我不清楚。
有两点是确定的:
引导程序是64位的,只能引导64位 ...

请教一下,是不是vhd也不能引导?

点评

是的,vhd也不能在自动菜单中一键引导,只能每个vhd都设置用bootmgfw.efi+bcd 引导。 目前自动菜单一键引导的镜像文件就只有wim文件。  详情 回复 发表于 2019-10-1 11:00
回复

使用道具 举报

 楼主| 发表于 2019-10-1 11:00:21 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-1 11:11 编辑
lgstd 发表于 2019-10-1 06:17
请教一下,是不是vhd也不能引导?


是的,vhd也不能在自动菜单中一键引导,只能每个vhd都设置用bootmgfw.efi+bcd 引导。
目前自动菜单一键引导的镜像文件就只有wim文件。

当然,grub2可以通过引导bootmgfw.efi 再去引导vhd文件,只是还做不到在自动菜单中一键引导。bios平台可能可以吧,但我在bios平台都是用grub4dos的SISO实现的,没有尝试过bios平台下用grub2.
回复

使用道具 举报

发表于 2019-10-11 22:03:48 | 显示全部楼层
先收藏,慢慢消化
回复

使用道具 举报

发表于 2019-10-13 16:07:52 | 显示全部楼层
大大在吗?我用XOR启动的增加一个凤凰系统
引导efi文件grubx64.efi,启动后运行到命令行就没了
调整大小 微信图片_20191013160035.jpg
是那个文件出错呢?

我的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
回复

使用道具 举报

发表于 2019-10-13 16:36:41 | 显示全部楼层
谢谢,收藏测试
回复

使用道具 举报

发表于 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
回复

使用道具 举报

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

grub2引导到命令行是因为默认路径找不到grub.cfg
grub.cfg的位置与grubx64.efi的位置无关,是在编译grubx64.efi时指定的

例如:
  1. grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos part_gpt fat exfat ntfs normal chain configfile probe regexp test search wimboot halt reboot help linux
复制代码

上面编译命令中,-p /efi/grub 这个参数就是指定安装路径是 /efi/grub,也就是编译生成的grubx64.efi 使用的配置文件是 /efi/grub/grub.cfg 。如果这个路径的grub.cfg不存在,启动时就会进入命令行。
在grub2命令行中,输入set, 会显示所有grub2环境变量值,其中 prefix= 后面的值就是grub.cfg的默认位置,只要将修改好的grub.cfg放到这个位置就会起作用,不再是直接进入命令行。

点评

原来的grubx64.EFI还可以在编译来修改grub.cfg文件的位置吗?  详情 回复 发表于 2019-10-14 09:11
回复

使用道具 举报

 楼主| 发表于 2019-10-14 05:44:56 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-14 06:11 编辑
vm669 发表于 2019-10-13 18:50
这两天增加凤凰Os
然后发现grubx64.efi启动需要的grub。cfg是需要放在boot里面
但是深度自己的shimx64.ef ...


xorboot的话请参考下图,这是想象中的设置,我没有测试过,你可以试试,不成功的话就变换一些参数再试

phoenix.jpg

当然,如果不是直接用linux内核方式启动,也可以用 efi 方式启动,先引导grubx64.efi 再由grubx64引导phoenix.

我个人认为,比较简单固定的菜单,使用xorboot比较合适,文件结构也简单;如果要测试各种pe镜像或其他系统,使用grub2会更灵活。
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-10-14 10:47:29 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-14 11:05 编辑
vm669 发表于 2019-10-14 09:11
原来的grubx64.EFI还可以在编译来修改grub.cfg文件的位置吗?


是的,本贴所表述的定制其实就两段代码,一段是编译生成efi文件,一段是编辑配置文件。你可以回头再仔细阅读。
最基本的编译参数是 grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal
O 参数是指定用于什么平台,编译时就会使用相应文件夹的模块 (x86_64-efi)
p 参数是指定prefix变量值,安装文件夹,也就是配置文件所在文件夹 (/efi/grub)
o 参数是指定生成的efi文件名 (grubx64.efi)
最后面是内置模块列表 part msdos fat normal 这四个模块是必备的,这样才能在启动时进入正常模式,否则会进入救援模式。

要将配置文件放在deepin文件夹,编译命令类似这样:
grub-mkimage -O x86_64-efi -p /deepin -o grubx64.efi part_msdos fat normal

但是对于linux系统,grub.cfg 是由系统自动生成的,用户不应该编辑修改,用户修改的应该是你之前说的 40_启动菜单 这类用户定义配置。

你可以将自己的prefix值设置为 /efi/grub、/efi/boot、/boot、/boot/grub 等等。前面两个这一类一般是efi平台,后面两个这一类一般是bios平台。

点评

谢谢你 开始安装虚拟机,准备学习GRUB2 也是想每个文件夹一个启动  详情 回复 发表于 2019-10-14 14:06
回复

使用道具 举报

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

谢谢你

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

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-10-14 18:02:26 | 显示全部楼层
vm669 发表于 2019-10-14 15:20
也学习过 極限驅動 的贴子 Windows定制Grub2(包括BIOS和UEFI、自定义Grub2路徑)http://bbs.wuyou.net/for ...

他这两个菜单项是分别引导两个分区内的 /efi/microsoft/boot/bootmgfw.efi,这两个分区应该都是efi分区
其实没有必要多个efi分区,直接引导每个windows分区的 \Windows\Boot\EFI\bootmgfw.efi 就可以了
比如可以把第一个windows分区的 \Windows\Boot\EFI\bootmgfw.efi 复制一份命名为 boot1.efi
把第二个windows分区的 \Windows\Boot\EFI\bootmgfw.efi 复制一份命名为 boot2.efi
菜单项如下:
menuentry "第一Windows分区" "/Windows/Boot/EFI/boot1.efi" {
        search --no-floppy --set --file $2
        chainloader $2
}
menuentry "第二Windows分区" "/Windows/Boot/EFI/boot2.efi" {
        search --no-floppy --set --file $2
        chainloader $2
}

点评

是这样吗?我以为他的 set root='(hd0,gpt2)' 是指定启动分区呢? 我以后将说分区:EFI,win7,win8,win10,DEEPIN,。。 然后用 set root='(hd0,gpt2)' 这样来指定启动不同系统。 ============ 如果我想  详情 回复 发表于 2019-10-14 20:12
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-10-14 20:27:42 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-14 20:37 编辑
vm669 发表于 2019-10-14 20:12
是这样吗?我以为他的 set root='(hd0,gpt2)'
是指定启动分区呢?


set root='(hd0,gpt2)' 是指定启动分区
但我的操作通常不用指定分区,都是根据启动文件来查找启动分区。
win7, win8, win10 都存在 \Windows\Boot\EFI\bootmgfw.efi
分别复制改名或直接改名,
win7的叫做 \Windows\Boot\EFI\boot7.efi
win8的叫做 \Windows\Boot\EFI\boot8.efi
win10的叫做 \Windows\Boot\EFI\boot10.efi

cfg语句为
menuentry "0.Windows 7" "/Windows/Boot/EFI/boot7.efi" --hotkey=0 {
        search --no-floppy --set --file $2
        chainloader $2
}
menuentry "1.Windows 8" "/Windows/Boot/EFI/boot8.efi" --hotkey=1 {
        search --no-floppy --set --file $2
        chainloader $2
}
menuentry "2.Windows 10" "/Windows/Boot/EFI/boot10.efi" --hotkey=2 {
        search --no-floppy --set --file $2
        chainloader $2
}

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

我没有用过deepin,没办法给建议,你设置好了不妨在这里分享一下。

点评

时隔多年再来寻找这段指导,再次感谢大大 目前的本本和台式老机安装deepin和mint已经可以自动安装显卡等驱动,完美支持 目前还是多系统,win10+win8.1VHD+linux, 为了一级菜单多系统启动,再次寻找大大这段回  详情 回复 发表于 2023-4-10 21:27
今天在虚拟机操作,cfg文件改了boot7.efi, BCD也放在C盘的 \Windows\Boot\EFI\ 文件夹 开机还是提示找不到BCD 这是什么情况呢? 其他启动文件用的是你的三分区U盘的grub2  详情 回复 发表于 2019-11-8 09:42
不要忘了每个windows分区都要配置一个bcd文件,就放在各自的 \Windows\Boot\EFI\ 文件夹 我觉得还是应该放在EFI区,系统分区经常重装再搞BCD麻烦 我觉得应该像你之前思路启动文件统一放在EFI区, 各自系统盘怎  详情 回复 发表于 2019-10-15 08:41
对头,就是这样,你厉害 我刚好看到这边文章“bootmgfw.efi 任意存放 , 引導不同的 BCD” 但是你更厉害,bootmgfw.efi 这个文件还能改名  详情 回复 发表于 2019-10-14 20:53
回复

使用道具 举报

发表于 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  这个文件还能改名
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-10-15 13:18:13 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-15 13:21 编辑
vm669 发表于 2019-10-15 08:41
不要忘了每个windows分区都要配置一个bcd文件,就放在各自的 \Windows\Boot\EFI\ 文件夹

我觉得还是应 ...


正是为了统一的efi区,不管哪台电脑,多次重装,efi区引导都不用变动。

而每次重装系统或每台不同的电脑,bcd都是不同的,所以我建议bcd放在windows分区跟bootmgfw.efi放一起。
efi区的启动文件(无论是xorboot还是grub2)都是引导到windows分区的bootmgfw.efi 这样efi区才不需要每次更新

重装windows搞bcd不过是一个脚本的事,而且在windows分区搞bcd当然要比在efi区搞bcd简便得多。
回复

使用道具 举报

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

基本成功了,只差kernel的命令行,真的不懂了
IMG20191016111042.jpg
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用命令行
2019-10-16_121124.jpg
出错
IMG20191016111150.jpg


XOR的DEEPIN启动菜单再增加凤凰OS和win10
IMG20191016111057.jpg
凤凰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
}
可以启动,但是启动时有暂停显示一个出错画面
微信图片_20191016122534.jpg
不管它,一会儿还是可以进入win10的。不知道是菜单文件问题还是系统问题,这两天win10系统有点慢,经常鼠标不能动

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


回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2019-10-16 18:20:32 | 显示全部楼层
vm669 发表于 2019-10-16 12:36
再开一个帖子请教大侠
1、如果我不修改efi定义cfg文件位置,是不是cfg必须放在efi-boot里面。?
2、如果 ...
1、如果我不修改efi定义cfg文件位置,是不是cfg必须放在efi-boot里面。?

对grub2来说,不存在修改不修改,配置文件应在位置是在编译efi文件时指定了的。
是你自己编译生成的efi文件,你会知道,这个位置是由 -p 参数指定的,如果忘记了或者是别人编译生成的efi文件,可以进入grub2命令行输入set来查看prefix的值。
2、如果像deepin这样自己修改的shimx64.efi,那就必须按他的方式放,这个名字好像是你说过的安全启动方面的?

shimx64.efi应该是安全启动需要的吧,后面的grubx64.efi才是真正的grub引导,生成这个grubx64.efi的时候 -p 参数指定了什么位置我们就要将配置文件放到什么位置。不知道的话同样是在grub2命令行输入set来查看。
3、如果我清空目前的EFI区文件,要改为grub启动,是不是要安装grub启动?怎么安装?看网上说的修复启动那样,好像BOOTICEx64就可以,但是哪个grub4dos是grub还是grub2?还有其他方式吗?

efi区改为grub2启动,只要将grub2的efi文件如grubx64.efi改名为bootx64.efi放到\efi\boot,然后将grub.cfg放到这个efi文件指定的文件夹就可以了。grub2的efi文件可以复制别人的,也可以是自己编译的。grub.cfg的位置不确定就在grub2命令行下输入set来查看。
bootice既可以安装grub4dos引导也可以安装grub2引导,但都是安装到mbr的,是bios平台的,不是uefi平台。
grub原来发展到0.97版就停止了,后来另外的团队继续开发,可以理解为两个团队走了两个分支,一个分支是grub4dos,另一个分支是grub2. 所以grub可以理解为有三个版本:原来的Grub Legacy, 后来的Grub2 和 Grub4Dos.
4、如果按grub2启动,那就是只要一个grub.cfg文件了,放在boot里面,那么menuentry前面的一大堆的那些代码是一定要的还是可以不要,只要timeou时间简单几个就行?。

一个grubx64.efi本来就只要一个grub.cfg,放在哪里同样是由grubx64.efi生成时指定的。 menuentry前面的一大堆的代码是可以不要的,只是那样就达不到原来的启动效果。你自己配置的话可以先做最简单的配置,只要能引导系统就可以了,有条件再学习各种启动效果。但如果编译grubx64.efi时少了的模块,启动要用到的话,加载模块语句少了会出错的,比如你前面的出错画面 (...... not found.) 有可能是没有加载ntfs模块导致不识别ntfs分区找不到bootmgfw.efi而造成的,不过我也不肯定。
5、假如我用你的uboot的efi放进去,需要注意什么?你的cfg文件也是放在grub里面的

我的efi 是指定配置文件为 \efi\grub\grub.cfg的,整套文件放进去然后修改grub.cfg为你需要的就可以了
回复

使用道具 举报

 楼主| 发表于 2019-10-17 13:38:10 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-17 13:39 编辑

@sea2moon
导入证书这个操作本身不会覆盖原来的文件,但会保存信息到nvram中
而导入证书的前提是你将主启动改为grub2,这个操作肯定会将原来的主启动文件覆盖(\efi\boot\bootx64.efi)

你可以使用原来的主启动bootmgfw.efi (\efi\boot\bootx64.efi),要启动到PE只要在bcd中设置就可以了 (\efi\microsoft\boot\bcd)

如果真的要改用grub2启动,一定要先备份efi区,至少要备份efi这个文件夹下的所有内容。
如果没有备份efi区而又改了的话,可以尝试用bcdboot恢复。
关键的是要备份windows分区,也就是预装系统的分区。

点评

好的,谢谢! 我所有的文件都已经备份好了。 这几天试着装win7,装不上去,已经破坏N次了。 官网上说电脑只支持win10,而且只有win10的驱动下载。 电脑在bios 设置界面有个单独的项目(supportassist os recov  详情 回复 发表于 2019-10-17 13:45
回复

使用道具 举报

发表于 2019-10-17 13:45:58 | 显示全部楼层
hilsonma 发表于 2019-10-17 13:38
@sea2moon
导入证书这个操作本身不会覆盖原来的文件,但会保存信息到nvram中
而导入证书的前提是你将主启 ...

好的,谢谢!
我所有的文件都已经备份好了。
这几天试着装win7,装不上去,已经破坏N次了。
官网上说电脑只支持win10,而且只有win10的驱动下载。

电脑在bios 设置界面有个单独的项目(supportassist os recovery)--不在启动项里面,昨天我修改启动文件后,就告诉我程序损坏了(可联网下载修复)。从备份文件恢复后可用。

点评

为什么要装win7呢,如果觉得win10卡可以尝试装这个win8.1 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409320 如果主板只认win10可以尝试efi区用win10的bootmgfw.efi,也就是装了win7或win8.1后,将efi区  详情 回复 发表于 2019-10-17 14:06
回复

使用道具 举报

 楼主| 发表于 2019-10-17 14:06:48 | 显示全部楼层
sea2moon 发表于 2019-10-17 13:45
好的,谢谢!
我所有的文件都已经备份好了。
这几天试着装win7,装不上去,已经破坏N次了。

为什么要装win7呢,如果觉得win10卡可以尝试装这个win8.1 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409320

如果主板只认win10可以尝试efi区用win10的bootmgfw.efi,也就是装了win7或win8.1后,将efi区启动文件改回你原来win10的启动文件。

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

如果这样安装都安装不了那我也没有办法了,用回你原来预装的系统吧。

点评

再用dism或wim工具将安装镜像展开到windows分区,最后新建一个bcd文件覆盖到efi区 \efi\microsoft\boot\bcd 完成这些操作后重启会进入系统安装设置画面,如卡停在硬件不适合按确定重启,这时不要理会,按Shift+F1  详情 回复 发表于 2019-10-23 10:37
回复

使用道具 举报

发表于 2019-10-17 14:24:15 | 显示全部楼层
詳細,看得懂,學習了
回复

使用道具 举报

发表于 2019-10-17 17:47:34 | 显示全部楼层
本帖最后由 sea2moon 于 2019-10-17 17:49 编辑
注意现在 \efi\boot\bootx64.efi 不再是xorboot生成的启动文件,而是Shim的主程序,xorboot生成的启动文件已更名为grubfmx64.efi (Shim+mok启动方案必须是这个名字才能引导成功)。

shim + mok
还请费心解释一下。通过bootx64再调用grubfmx64.efi?

大概是这个意思吧:https://www.kvaser.cn/developer-blog/secure-boot-linux-systems/

点评

shim -> grub -> grubfm | | +-- mokmanager bootx64.efi MokManager.efi + GRUBFM.cer grubx64.efi grubfmx64.efi =========== >> [=========================== >>] =========== >>  详情 回复 发表于 2019-10-17 18:19
回复

使用道具 举报

 楼主| 发表于 2019-10-17 18:19:37 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-17 18:38 编辑
sea2moon 发表于 2019-10-17 17:47
shim + mok
还请费心解释一下。通过bootx64再调用grubfmx64.efi?



shim -> grub -> grubfm
  |          |
  +-- mokmanager

bootx64.efi         MokManager.efi + GRUBFM.cer          grubx64.efi       grubfmx64.efi
======= >> [==================== >>] ======= >> =========>>
Shim loader        mok管理               grubfm密钥          shim grub         用户grub

GRUB 目前尚无带有微软签名的版本,因此不能直接通过安全启动。必须通过 Shim 等加载。
Shim 通过了微软的认证,内置了一些 Linux 发行版维护者的密钥,例如 Red Hat (Fedora), Novell (SUSE), Canonical (Ubuntu)。
bootx64.efi 即为Shim的主程序。Shim 会检验 grubx64.efi 的证书。如果检验通过,则加载 grubx64.efi,否则加载 Mokmanager.efi。
Mokmanager 用于修改 Mok 列表,导入自己的密钥 (MOK)。

由shim loader 加载 shim grub, 如未检测到证书需要导入证书,所以第一次会加载Mokmanager来导入证书,然后才加载shim grub,最后由shim grub加载用户程序(用户grub).

所以用户只可以修改grubfmx64.efi,其他只可以照搬不可以修改,否则不能过secureboot.

以上就是shim+mok方案。

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-10-17 21:29:46 | 显示全部楼层
本帖最后由 sea2moon 于 2019-10-17 23:07 编辑

晚上回来试了下
附件把你efi压缩包中的bootx64改名为grubfmx64
然后把安全启动的四个文件放入boot

启动后 选 from disk 导入证书,显示不是有效格式

何解?

点评

安全启动四文件+grubfmx64 应该是5个文件 四文件修改日期是 2019-06-25 08:15 的 grubfmx64 修改日期是 2019-07-27 21:17 的 请重新下载再试  详情 回复 发表于 2019-10-17 22:25
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 04:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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