当前位置: 代码迷 >> 综合 >> uefi setvariable 过程
  详细解决方案

uefi setvariable 过程

热度:21   发布时间:2023-12-14 22:26:05.0

gRT->SetVariable  用来增加,更新,删除变量,

其实现在:

\MdeModulePkg\Universal\Variable\RuntimeDxe\Variable.c

 

VariableServiceSetVariable

EFI_STATUS
EFIAPI
VariableServiceSetVariable (IN CHAR16                  *VariableName,IN EFI_GUID                *VendorGuid,IN UINT32                  Attributes,IN UINTN                   DataSize,IN VOID                    *Data)

 

所以,它接受五个参数:

刚好和这个对应:

 rt.SetVariable(Name, Guid, 0x7, len(Value), Data)

 

其attribute 有四种取值:

//
// Variable attributes
//
#define EFI_VARIABLE_NON_VOLATILE       0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS     0x00000004
#define EFI_VARIABLE_READ_ONLY          0x00000008

 

可以有多种属性 

EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS

rt.SetVariable(Name, Guid, 0x7, len(Value), Data)

0x7 应该是 EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS

 

第三个参数为变量的长度 len(value)

第四个就是值

验证 :

shell 下执行 : dmpstore

看有没有拿到自己更改后的值

 

ps:

volatile的意思:

个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份

 

 non-volatile 应该就是不变的