9.UEFI-附录1-HOBs说明-《计算机知识》

admin 2025-11-02 22:15:55 系统网络 来源:ZONE.CI 全球网 0 阅读模式
  • 参考和说明
  • 什么是HOB
  • HOB的作用
  • HOB(Hand-off Block) Services
  • HOB Design Discussion
  • HOB Code Definitions
    • HOB Introduction

    参考和说明

    • UEFI Platform Initialization (PI) Specification
    • hob简单练习
    • UEFI HOB

    什么是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中,只能读。

    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 mapimage.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

    **

    01-shell脚本介绍-《shell脚本》 系统网络

    01-shell脚本介绍-《shell脚本》

    一、shell脚本是什么二、为什么要学shell,而不是其他计算机语言三、学习这门课程的优势四、学了能干什么五、学习什么内容六、学习的技巧七、成长路径八、学习环
    评论:0   参与:  25