为了更加纯净的使用Windows,使用了rEFInd来引导Windows和opencore。但是当在BIOS中把rEFInd设为第一启动项之后,通过rEFInd启动opencore进入BigSur,再重启,opencore就变成了第一启动项。即使冷重启也是如此。
这个奇怪的现象促使我研究了一下opencore的启动保护问题。
Bootstrp.efi 与 BOOTx64.efi
众所周知,opencore的启动项不是 opencore.efi,而是 EFI/BOOT/BOOTx64.efi,而在opencore 0.5.8之后又添加了一个新的启动项 EFI/OC/Bootstrap/Bootstrap.efi。所以,opencore有两个可以使用的启动项:
EFI/BOOT/BOOTx64.efi
EFI/OC/Bootstrap/Bootstrap.efi
区别
想必很多人都意识到了这种现象: Windows 10 会修改BIOS的启动顺序,并把自己的启动项放到第一个。大多数人会简单的通过关闭win10快速启动来防止启动项被修改,但是win的行为是无法预知的,有时候不一定有用,起码大版本更新一定会修改启动项。
所以,opencore官方为了保护opencore的启动项不被Win10覆盖,也弄了一个受保护的启动项——Bootstrap.efi。这个启动项与BOOTx64.efi没有本质区别,最大的不同就是在config.pdist中有两个配置项来保护Bootstrap.efi永远是BIOS第一启动项,而且是默认启用的。
在删除Bootstrap.efi的启动项之前,一定要先关闭Bootstrap.efi的启动项保护!
关闭Bootstrap.efi的启动项保护
如果要确认是否使用了Bootstrap.efi,可以打开opencore的日志(见OpenCore Debugging),然后可以看到如下输出:
OCB: Have existing option 1, valid 1
OCB: Boot order has first option as the default option
编辑 config.plist :
Misc -> Security -> AllowNvramReset -> true
Misc -> Security -> BootProtect -> None
重启,在opencore启动菜单中选择 Reset NVRAM
经过上述两步就已经关闭了Bootstrap.efi的保护状态。