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 里面

在EFI启动过程中,PEI阶段与DXE阶段间的数据传递至关重要。受限于PEI阶段的内存环境,HOB机制作为稳定的数据传输方式被引入。HOBs存储在连续内存中,由PHIT标识并组成Hoblist,通过GetHobList获取其位置。CreateHob函数用于向Hoblist追加HOB。
2270

被折叠的 条评论
为什么被折叠?



