Variable Architectue Protocol 是PI 规范中定义的架构协议。安装此协议的驱动是个运行时驱动。
它负责注册Variable 的运行时服务(variable runtime services). uefi 规范定义了4个Variable
运行时服务: GetVariable, GetNextVariableName, SetVariable 和 QueryVariableInfo。
MdeModulePkg\Universal\Variable\RuntimerDxe\VariableDxe.c
SystemTable->RuntimeServices->GetVariable = VariableSericeGetVariable;
SystemTable->RuntimeSerivices->GetNextVariableName =
VariableSericeGetNextVarialeName;
SystemTable->RuntimeSerivices->QueryVariableInfo = VariableSerivceQueryVariableInfo;
//
// Now install the variable Runtime Architectural protocol on a new handle.
//
Status = gBS->InstallProtocolInterface(
&mHandle,
&gEfiVariableArchProtocolGuid,
EFI_NATIVE_INTERFACE,
NULL
);
ASSERT_EFI_ERROR(Status);
4个Variable 服务接口的注册。
Variable Architecture Protocol 的安装
Variable Write Architecture Protocol 的安装
Variable Write Architecture Protocol 也是PI 规范中定义的架构协议。该协议的安装意味着非
易失性变量(Non volative Variable ) 读写的操作已经就绪。跟易失性变量的操作不同,
Non volatile variable 读写需要借助于底层接口来操作非易失性存储介质,如flash 芯片。
//
// Now install the variable Runtime Architecture protocol on a new handle.
//
Status = gBS->InstallProtocolInterface(
&mHandle,
&gEfiVariableArchProtocolGuid,
EFI_NATIVE_INTERFACE,
NULL
);
ASSERT_EFI_ERROR(Status);
//
// Register FtwNotificationEvent() notify function .
//
EfiCreateProtocolNotifyEvent(
&gEfiFaultTolerantWriteProtoclGuid,
TPL_CALLBACK,
FtwNotificationEvent,
(VOID *) SystemTable,
&mFtwRegistration
);
注册Notfy 函数 ftwNotificationEvent() , 当EfiFaultTolerantWriteProcol 安装,执行该函数。
Variable 相关关键数据结构
MdeModulePkg\Universal\Variable\RuntimeDxe\Variable.h
typedef struct {
EFI_PHYSICAL_ADDRESS VolatileVarialeBase;
EFI_PHYSICAL_ADDRESS NonVolatileVariableBase;
EFI_LOCK VariableServicesLock;
UINT32 ReentrantState;
} VARIABLE_GLOBAL;
typedef struct {
VARIABLE_GLOBAL VariableGlobal;
UINTN VolatileLastVariableOffset;
UINTN NonVolatileLastVarialeOffset;
UINTN CommonVariableTotaolSize;
UINTN *PlatformLangCodes;
CHAR8 *LangCodes;
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbInstance;
} VARIABLE_MODULE_GLOBAL;
VARIABLE_MODULE_GLOBAL 结构描述了全局分配的资源。其中, VARIABLE_