使用bcdedit添加UEFI固件引导项

5

如何使用bcdedit添加一个新的UEFI固件引导菜单条目(在NVRAM中)。例如,我尝试了以下步骤,但是启动条目没有被添加。

bcdedit /create /d "LinuxLoader" /application osloader 

这将返回一个新的 GUID(比如说 newguid)。

bcdedit /set {newguid} device partition=S:
bcdedit /set {newguid} path \boot\efi\bootx64.efi
bcdedit /set {fwbootmgr} displayorder {newguid} /addfirst

提前感谢你。

1个回答

3
您不能使用OSLOADER类型的应用程序来启动Linux:这种类型是为Windows加载程序而设计的,这些应用程序是启动应用程序(不同于EFI应用程序),它们由Microsoft独家签名并由Windows引导管理器启动(有关此过程的良好描述,请参见此UEFI文档的第一张幻灯片)。

另一方面,可以添加另一个启动管理器并在UEFI中注册它(在NVRAM存储器中);步骤与您编写的步骤类似,只需使用

bcdedit / create /d“LinuxLoader”{bootmgr}

作为第一步操作。 bcdedit(实际上是bcdsrv)的工作原理在最后一步,条目还应复制到NVRAM中;因此,您的UEFI管理器现在至少有两个选择,Windows Boot Manager可能仍然是默认的。

实际上,这意味着您可能需要使用一些魔术键才能显示此菜单(UEFI启动管理器)。要更改默认条目,您可以尝试

bcdedit /set{fwbootmgr} default $newguid

这将更新NVRAM中的 BootCurrent 变量,因此UEFI固件应该会优先选择Linux加载程序而不是Windows;但是不能保证,我认为有些UEFI固件在此问题上编程得很糟糕;根据此问题,甚至似乎是Windows 8启动过程的标准行为来撤消此类更改:-(

此外,另外我会创建一个与标准位置(ESP)\EFI\BootX64.efi不同的条目,作为{fwbootmgr}列表中的一项预留措施:当某些(不明智的)工具决定恢复 正确的值并且简单地删除带有Microsoft的bootmgfw.efi的标准位置时,这样的条目将幸存下来...


1
感谢您的详细回复。我的需求已经改变,我使用Windows API SetFirmwareEnvironmentVariable()实现了相同的功能。 - Raghu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接