uefi setvariable 过程

版权声明:本文全部是胡说八道,如果你喜欢,可随意转载 https://blog.csdn.net/robinsongsog/article/details/83783061

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

猜你喜欢

转载自blog.csdn.net/robinsongsog/article/details/83783061