参考和说明

什么是HOB

HOB:Hand-off Block
在PEI的执行过程中,PEI Phase提供了一种简单的机制来为数据存储分配内存,这个数据存储区被称为HOBs
这个数据存储区的基本内容为Hand-off Block,即HOB。
在内存中,连续存在的HOBs对PEI Phase的可执行内容来说都是可见的。有一些Services用来帮助HOB管理。这些在内存中的HOBs的连续的表被称为HOB List。

HOB的作用

参考

在PEI->DXE入口处,提供的参数只有一个:HOB表

  • 在PEI Phase 中,使用的数据存储区就叫做HOBs,PEI可以使用HOB向DXE传递信息。
  • 在PEI Phase 中,HOBs是可读可写的,在DXE Phase中,只能读。

image.png

HOB(Hand-off Block) Services

参考 UEFI Platform Initialization (PI) Specification Volume 1 第4.4节
提供 Hob相关操作接口
接口 参考 : edk2\EmbeddedPkg\Library\PrePiHobLib\Hob.c

  1. EFI_STATUS
  2. EFIAPI
  3. PeiGetHobList ( // This function returns the pointer to the list of Hand-Off Blocks (HOBs) in memory.
  4. IN CONST EFI_PEI_SERVICES **PeiServices,
  5. IN OUT VOID **HobList
  6. );
  7. VOID *
  8. CreateHob ( // the creation of a Hand-Off Block's (HOB’s) headers.
  9. IN UINT16 HobType,
  10. IN UINT16 HobLength
  11. )

HOB Design Discussion

参考 UEFI Platform Initialization (PI) Specification Volume 3 第4节

HOBs机制被用来 PEI根DXE交互系统信息的。
PEI阶段是 HOBs链表生产者。可读写。
DXE阶段是HOBs链表消费者。只读。

image.png

HOB producer phase memory map
image.png

  • 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长数组(根据类型不同,内容不同)

  1. ///
  2. /// Describes the format and size of the data inside the HOB.
  3. /// All HOBs must contain this generic HOB header.
  4. ///
  5. typedef struct {
  6. ///
  7. /// Identifies the HOB data structure type.
  8. ///
  9. UINT16 HobType;
  10. ///
  11. /// The length in bytes of the HOB.
  12. ///
  13. UINT16 HobLength;
  14. ///
  15. /// This field must always be set to zero.
  16. ///
  17. UINT32 Reserved;
  18. } 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

**