转自:http://blog.csdn.net/celiaqianhj/article/details/6793211
PEI:Pre-EFI Initialization
为什么要有PEI Phase?
1. ROM空间的问题,所有的Code都没有压缩
2. Memory还没有初始化
3. Chipset没有初始化
PEI Phase的特性:
1. 在ROM上执行
2. 都是没有被压缩的代码
3. PEI Core与硬体没有关联
PEI Phase的任务:
1. 基本的Chipset初始化
2. Memory Sizing
3. BIOS Recovery
4. S3 Resume
5. 切换Stack到Memory (Disable CAR, Enable Cache)
6. 启动DXEIPL(DXE Initial Program Loader)
PEI Phase包含的两个部分:
1. 一个PEI Foundation,存在于BFV。
2. 一个或多个PEIMs(Pre-EFI Initialize Module),存在于FVs。
一、关于PEI Foundation
PEI Foundation存在于FV0(即BFV),它是在SEC阶段被发现并通过验证的,这也就允许PEI阶段能够确定FV文件有没有被破坏掉。
PEI Foundation负责:
1. Dispatching PEIM
2. Maintaining the boot mode
3. Initialize permanent memory
4. Invoking DXEIPL
PEI Services
PEI Foundation建立了一个system table叫做PEI Services Table,它对所有的PEIM都可见。PEI Services的分类有:
二、关于PEIM(Pre-EFI Initialization Modules)
PEIM就是一些可执行的二进制代码,它封装着一些关于Processor,chipset,device或者是平台相关的一些功能。由PEI Foundation负责来Dispatch这些PEIMs。
大部分的PEIM都存在于ROM上,它们是没有被压缩的,只有极少数的PEIM为了提高性能而存在于RAM上,是被压缩的。
因为PEI Phase存在的环境只有极少的Hardware Resource可用,且PEIM大都位于ROM上,所以强烈建议PEIM只做尽可能少的,不得不做的工作来满足DXE阶段执行的要求。
PPI(PEIM to PEIM Interface)
PEIM与PEIM沟通是通过PPI,即PEIM to PEIM Interface。PPIs包含在数据结构EFI_PEI_PPI_DESCRIPTOR中,由一个GUID和一个指针组成。
一个PEIM通过PEI Service InstallPPI()和ReinstallPPI()来发布一个有效的PPI到PPI Database;
其他的PEIM通过PEI Service LocatePPI()来找到相关的PPI。
PEI Phase 代码流程图
