当前位置: 代码迷 >> 综合 >> 明明白白HOB hand-off Block
  详细解决方案

明明白白HOB hand-off Block

热度:82   发布时间:2023-12-14 22:37:25.0

EFI 将启动顺序分成了很多阶段,PEI 和DXE 之间的跨度比较大,PEI 阶段是在RAM-limited 环境运行的,但DXE 阶段是在相对充足的内存空间上运行的。

在内存初始化之前,或者初始化内存的时候,PEI 收集了很多数据供后续的DXE 用,也就是说,有些数据需要从PEI 阶段传到DXE.

由于PEI 的运行受到内存的限制,所以需要一种稳定的机制去传输数据,即, 我们今天要说的HOB(Han Off Blocks).


所有的Hob放在一段连续的内存里面,由一个以定义好的头去标识,这个头(header) 叫 Phase Handoff Information Table(PHIT). 我们把PHIT 和当前所有的hob  合在一起叫Hob list.

 PHIT的位置由GetHobList 这个系统服务区获得。

它的函数实现在hob.c :



如果我们想往hob list 里面追加一个HOB 那么是通过CreateHob 完成的。它的函数实现也是在hob.c 里面

 

85-88: 获取HOB 列表的起始地址


98: 调整HOB 的长度为8字节对齐。

100-101:计算当前可用的HOB数据块的空间。

110-113:  将hob 加到hob 列表最末端。

116: 将结束类型的hob 加到hob list 末尾用以表示HOB 列表结束。

118-112: 更新末端Hob节点的相关信息。

  相关解决方案