Memory Management (1)PEI 信息建立

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pedroa/article/details/53896055

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 区块。
展开阅读全文

没有更多推荐了,返回首页