UEFI Shell:永久更改变量的值(非易失性)

时间:2018-12-17 14:20:45

标签: uefi

我写了一个UEFI-App来更改uefi变量(调用gRT-> SetVariable(..))。尽管我更改了非易失性变量,但更改不会通过重置持久化。

我如何持久地进行更改?

使用UEFI-App,我可以更改我选择的变量的值。使用dmpstore variablename,我可以验证变量的值是否已正确更改(并带有'NV'标志)。但是重置后,旧值将恢复。

我使用uefiversion 2.4和uefishellsupport 3。

这个问题的背景是这个问题:Access BIOS/UEFI menu setting via uefi shell。 我想更改诸如ConOut,ConIn和其他可以在BIOS菜单设置中更改的变量。

BTW:通过set uefi shell命令设置环境变量确实可以进行持久更改。我不明白为什么UEFI变量的更改不是持久性的...

2 个答案:

答案 0 :(得分:1)

并非UEFI全局变量的所有更改在重新启动后都会保留。

对于CONINCONOUTERROUT,适用UEFI规范第3.6节的以下段落:

“ ConInDev,ConOutDev和ErrOutDev变量各自包含一个 EFI_DEVICE_PATH_PROTOCOL描述符,用于定义在onboot上使用的所有可能的默认设备。这些变量是易失性的,并且在每次引导时都会动态设置。 ConIn,ConOut和ErrOut始终是ConInDev,ConOutDev和ErrOutDev的适当子集。“

答案 1 :(得分:0)

您应使用EFI_SHELL_PROTOCOL.SetEnv()设置UEFI Shell环境变量。

  

此函数更改指定环境变量的当前值。   如果环境变量存在并且“值”为空字符串,则   环境变量被删除。如果环境变量存在并且   值不是空字符串,则环境变量的值为   改变了。如果环境变量不存在并且值是空的   字符串,没有任何动作。如果环境变量不存在并且   值是一个非空字符串,然后创建环境变量并   分配了指定的值。

有关更多详细信息,请参见UEFI Shell Specification