Memory Management (1)PEI 信息建立

来源:互联网 发布:pc手机微信三合一源码 编辑:程序博客网 时间:2024/05/01 09:30

PEI 阶段有它自己的使命,其中非常重要的一个就是初始化内存,建立内存信息,然后传给下一个阶段。为了完成PEI 的这些任务,它也需要有内存管理。

1 PEI 阶段和内存相关的,我们又不得不提一个重要的结构HOB

HOB (Hand-Off Block)
Hob 主要功能就是记录信息并且可以传递出去。(关于HOB 初始化,还有例如PEI 阶段临时内存到恒定内存,堆栈转换等等,会在之后PEI Core 里讲解)。

图1
图1

具体各个区块的含义,下面用到哪个就具体介绍哪一个,先看看长什么样就好。

2 PEI 阶段内存的安装
主要的一个function 就是 InstallEfiMemory() 这个function 里呢做了很重要的两件事:

  • build Resource HOB
  • install PEI memory

下图是X86内存MAP 的一个大概的样子

  //  // Memory Mapping  //  // *------------+ HostIOBoundaryHi   // *            +  // *------------+ 4G = HighSystemMemoryBase  // *            +  // *            +   [MMIO Memory]  // *            +  // *------------+ HostIOBoundary  // *            +  // *------------+ GMS Base  // *            +  // *------------+ GTT Base  // *            +  // *------------+ TSEG Base  // *            +  // *------------+ dPeiMemHi    // *            +   // *            +  // *------------+ dPeiMemBase Base  // *            +  // *            +  // *            +   [System Memory]  // *            +  // *------------+ 0x1000       // *            +     // *------------+ 0x400000 (256M)  // *            +  // *------------+ 0x100000 (1M) = LowSystemMemoryBase  // *            +     // *------------+ legacy  // *            +     // *------------+ 02

那么在InstallEfiMemory ()里会为上图每个区块调用BuildResourceDescriptorHob()去记录这些信息(包括属性,起始地址和长度)。之后在DXE 阶段就可以通过查找这些ResourceHob 去了解整个系统内存的分布情况。接下来还会调用 InstallPeiMemory()去建立PEI 内存的使用信息。我们PEI 阶段使用的内存会在TSEG BASE 下面,如上图的dPeiMemBase 位置。PeiMemSize 可以根据自己的板子,RCcode或者kernel 开发者会去调整大小。

3 . HOB 的建立
HOB 是有规定的,第一个HOB 必须是PHIT HOB , 最后一个必须是End of HOB List HOB.
当InstallPeiMemory 之后PHIT 被初始化如下内容:

PHIT->EfiMemoryTop = dPeiMemHi
PHIT->EfiMemoryBottom = dPeiMemBase
PHIT->EfiFreeMemoryTop = dPeiMemHi
PHIT->EfiFreeMemoryBottom = PHIT->EfiEndOfHobList + sizeof (EFI_HOB_GENERIC_HEADER);

到目前,我们Hob 里就有如下信息:

  • Resource hob 若干 (每个Hob 都描述了一个地址区块) 总共0-4G 或者 0-64G
  • PHIT信息指向了 Pei memory 区块。
0 0
原创粉丝点击