我写了一个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变量的更改不是持久性的...
答案 0 :(得分:1)
并非UEFI全局变量的所有更改在重新启动后都会保留。
对于CONIN
,CONOUT
和ERROUT
,适用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