参考和说明
什么是HOB
HOB:Hand-off Block
在PEI的执行过程中,PEI Phase提供了一种简单的机制来为数据存储分配内存,这个数据存储区被称为HOBs。
这个数据存储区的基本内容为Hand-off Block,即HOB。
在内存中,连续存在的HOBs对PEI Phase的可执行内容来说都是可见的。有一些Services用来帮助HOB管理。这些在内存中的HOBs的连续的表被称为HOB List。
HOB的作用
参考
- UEFI Platform Initialization (PI) Specification Volume 1 第9.3节
- UEFI Platform Initialization (PI) Specification Volume 3 第4.1节
在PEI->DXE入口处,提供的参数只有一个:HOB表
- 在PEI Phase 中,使用的数据存储区就叫做HOBs,PEI可以使用HOB向DXE传递信息。
- 在PEI Phase 中,HOBs是可读可写的,在DXE Phase中,只能读。
HOB(Hand-off Block) Services
参考 UEFI Platform Initialization (PI) Specification Volume 1 第4.4节
提供 Hob相关操作接口
接口 参考 : edk2\EmbeddedPkg\Library\PrePiHobLib\Hob.c
EFI_STATUS
EFIAPI
PeiGetHobList ( // This function returns the pointer to the list of Hand-Off Blocks (HOBs) in memory.
IN CONST EFI_PEI_SERVICES **PeiServices,
IN OUT VOID **HobList
);
VOID *
CreateHob ( // the creation of a Hand-Off Block's (HOB’s) headers.
IN UINT16 HobType,
IN UINT16 HobLength
)
HOB Design Discussion
参考 UEFI Platform Initialization (PI) Specification Volume 3 第4节
HOBs机制被用来 PEI根DXE交互系统信息的。
PEI阶段是 HOBs链表生产者。可读写。
DXE阶段是HOBs链表消费者。只读。
HOB producer phase memory map
- HOBs 链表中 , 第一个HOB必须是the Phase Handoff Information Table (PHIT) HOB
- HOBs 链表中, 最后一个HOB必须是 the End of HOB List HOB.
HOB Code Definitions
参考 UEFI Platform Initialization (PI) Specification Volume 3 第5节
HOB Introduction
所有的Hob有个公共header, 后边跟一个0长数组(根据类型不同,内容不同)
///
/// Describes the format and size of the data inside the HOB.
/// All HOBs must contain this generic HOB header.
///
typedef struct {
///
/// Identifies the HOB data structure type.
///
UINT16 HobType;
///
/// The length in bytes of the HOB.
///
UINT16 HobLength;
///
/// This field must always be set to zero.
///
UINT32 Reserved;
} EFI_HOB_GENERIC_HEADER;
目前HOB支持以下几种类型
- EFI_HOB_GENERIC_HEADER
- EFI_HOB_HANDOFF_INFO_TABLE
- EFI_HOB_MEMORY_ALLOCATION
- EFI_HOB_MEMORY_ALLOCATION_STACK
- EFI_HOB_MEMORY_ALLOCATION_BSP_STORE
- EFI_HOB_MEMORY_ALLOCATION_MODULE
- EFI_HOB_RESOURCE_DESCRIPTOR
- EFI_HOB_GUID_TYPE
- EFI_HOB_FIRMWARE_VOLUME
- EFI_HOB_FIRMWARE_VOLUME2
- EFI_HOB_FIRMWARE_VOLUME3
- EFI_HOB_CPU
- EFI_HOB_MEMORY_POOL
- EFI_HOB_UEFI_CAPSULE
- EFI_HOB_TYPE_UNUSED
- EFI_HOB_TYPE_END_OF_HOB_LIST
**
还包含其他数据类型和结构的定义,这些数据和结构从属于它们在其中被调用的结构。 可以在“Related
Definitions”中找到以下类型或结构
父数据结构定义的“定义”:
- EFI_HOB_MEMORY_ALLOCATION_HEADER
- EFI_RESOURCE_TYPE
- EFI_RESOURCE_ATTRIBUTE_TYPE
**