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 应该就是不变的