Guid主要是用来储存各种值variable
比如你可以定义一个Guid
[Guids]
gEfiMdeModulePkgTokenSpaceGuid = { 0xA1AFF049, 0xFDEB, 0x442a, { 0xB3, 0x20, 0x13, 0xAB, 0x4C, 0xB7, 0x2B, 0xBC }}
然后你可以定义相应的pcd值,在后边使用
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE|BOOLEAN|0x0001001d
主要格式是
***Guid.name | Value | Type | Id
这里是BOOLEAN型。ID必须是全局唯一,不能跟其他变量值一样。
Protocol则是也要定义,然后通常是提供函数,就像是生产消费模型里面的生产者一样,然后其他人可以调用这个Protocol里面的方法
[Protocols]
gEfi***ProtocolGuid = {0xA1AFF049, 0xFDEB, 0x442a, { 0xB3, 0x20, 0x13, 0xAB, 0x4C, 0xB7, 0x2B, 0xB1}}
然后一般生产者会使用:
Status = gBS->InstallProtocolInterface(
&ImageHandle,
&gEfi***ProtocolGuid,
EFI_NATIVE_INTERFACE,
&m***
);
ASSERT_EFI_ERROR (Status);
其中m****一般是一个变量:
EFI_GET_PROTOCOL mGet = {
GetTest,
SetTest,
};
EFI_STATUS
EFIAPI
GetTest (
IN EFI_TIME *Time
)
{
***
}
然后这个EFI_GET_PROTOCOL可以在Inclue/Procotol/中设置一个.h
typedef struct _EFI_GET_PROTOCOL EFI_GET_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *GetTest) (
IN EFI_TIME *Time
);
struct _EFI_GET_PROTOCOL {
Get GetTest;
UINT8 test;
};