-
Intel?
Framework
Architecture
Specification·
3
(Chapter3:Pre-EFI
Initialization
(PEI)
Phase)2007-05-26 15:253 Pre-EFI
Initialization (PEI) Phase
3.1 Introduction
Pre-EFI
Initialization
(PEI)
phase
提供了标准
化的
method
来
loading
和
invoking
特定的初始
configuration
routines
for
the
processor,
chipset,
and
motherboard.
PEI
phase
的首要目的是初始
化足够的系统来允许
Driver Execution Environment
(DXE) phase
运作
.
最基本的
, PEI
Phase
要做到决定系统
boot
path;
初始化并描述
system
RAM
和
firmware
volume
的最小值
. Firmware
volume
包含了
DXE Foundation
和
DXE
Architectural Protocols.
3.1.1 Scope
PEI
phase
负责将系统初始化
到足够提供一个稳定的基础给随后的
phase,
还负责侦测和
recovering from
出问题的
firmware storage space.
2000
年时代的
< br>PC
刚开始执行时还是处于非常原始的状态
,
processor
需要通过
microcod
e
做
update,
chipset
需要做非常多的初始化动作
,
RAM
需要
sizing,
location
和其他初
始化
.
PEI phase
就负责初始化这些
subsystem.
另外
PEI
还将提供一个简单的基础框
架以供很
容易的完成到
DXE
phase
的转换
.
换而言之
,
它必须完成开始
DXE
所需要的最少的动作
.
H/W
有改变时
,
这些动作也有所改变
.
3.1.2 Rationale
基本原理
p>
PEI
的设计本质上是一个微型版本的
DX
E,
以用来处理很多相同的
issue.
组成
:
-
A PEI Foundation
- One or
more Pre-EFI Initialization Modules (PEIMs)
PEI Foundation
的目
的是为特殊的
processor
架构保留参数
,
并支持来自各种
processor,
chipset,
platform
vendor
的
add-in module.
p>
PEI
与
DXE
不
同
,
因为
DXE
理所当然的认为
system
RAM
都存在并可用
.
PEI
则需认
定只用有限的
temporary
RAM
存在
,
并且当
permanent
system
RAM
初始化完后可以
重分配
temporary
RAM
以供他用
.
就本身而言
, PEI
并不像
DXE
那样有丰富的
feature
3.1.3 Overview
PEI
phase
由
foundation code
和特殊的
driver(PEIM)
组成
. Foundation code
负责按连
续的
顺序分配
plug-in,
并提供基本的
service.
而<
/p>
PEIM
则类似与
DXE driver
通常与要初始化
的
component
对应
.
预订的惯例是由
component
vendor
来提供
PEIM.
PEI phase
的实现比其他<
/p>
phase
更依赖于
processor
架构
.
特别是
,
当
processor
在其初始
化或准初始化状态能提供的
resource
越多
,
PEI
环境就会越充足
.
3.2 Phase
Prerequisites
下面的
section
描述了成功完成
PEI
phase
所必须的条件
.
3.2.1 Temporary RAM
PEI
foundation
需要
SEC
phase
初始化一段有最低限度容量的
scratch
pad RAM.
这段
RAM
可被<
/p>
PEI
phase
用来做
data
store
直到
system
memory
被完全初始化
.
Scratch
pad
RAM
可以如同普通的
system
RAM
一样访问
,
< br>比如通过
FSB
的
memory
cycle
来读写
.
在
system
memory
被完全初始化后
,
这段
临时的
RAM
可重配置做他用
.
p>
一种典型的实现方式就
是用
process
or
的内部
cache
来做
.
3.2.2 Boot Firmware V
olume
Boot
Firmware
Volume
(BFV)
包括了
PEI
Foundation
和
PEIM.
它必须出现
在系统的
memory
address space,
并不能有前置
F/W
插入
.
其包含了
reset vector.
BFV
的内容遵循
EFI
flash
file
system
的格式
.
Platform-specific
PEIM
要通知
PEI
foundation
其他
firmware
volume
的
location,
以方便其寻找
.
3.2.3 Security Primitives
SEC
phase
会提供
interface
给
PEI
foundation
做鉴定操作
.
为了继续保持
root
of
trust,
PEI
foundation
会用这个机制去鉴定各种
PEIM.
3.3
Concepts
3.3.1 PEI Foundation
执行两个主要功能
:
- Dispatching PEIMs
- Providing a set of common core
services used by PEIMs
PEI
Dispatcher
的工作是按照顺序方式传递控制权给
PEIM.
而
common
core
services
则是从头到尾的按照
PEI
Services Table
提供服务
.
这些服务做的事情如下
:
1.
协助
PEIM-to-PEIM
communication.
2.
简要的管理
temporary RAM.
3.
提供通用
functions
来帮助
PEIM
做到
:
-
在
FF
S
中寻找其他
file
-
报告
status code
-
为<
/p>
Framework
的下一个
phase
准备
handoff state
SEC phase
完成后
,
SEC
会调入
PEI
Foundation
并提供以下参数给
PEI:
- BFV
的
location
和
size,
以让
PEI Foundation
知
道去哪里寻找
PEIM
的初始化套路
.
- PEI
phase
可用的最小数量
temporary RAM
-
鉴定
service
callback
以让
PEI
Foundation
验证
PEIM
PEI Foundation
协助
PEIM
彼此沟通
. PEI Fou
ndation
会
maintain
一
个包含了
PEIM
注册接口
的
database.
这些
interface
称为
PEIM-to-PEIM Interface
(PPI).
PEI
Dispatcher
由
single
phase
组成
. PEI Foundation
会检查每个包含了
PEIM
类
型
file
的
firmware volume.
它会检查每个
firmware
file
里的
dependency expression
(depex)
来
决定是否一个
PE
IM
可以被执行
.
3.3.2 Pre-EFI Initialization Modules
(PEIMs)
PEIM
是一些可执行的二进制码
,
封装了
processor,
chipset,
device
或
platform-
specific
功能
. PEIM
提供了
interface,
其他
PE
IM
或者
PEI Foundation
可通过
interface
与
PEI
M
或者
H/W
沟通以得知其
PEIM
概要
. PEIM
各自独立的
built
成二进制模块
,
不压缩
的放在
ROM
里
.
出于
perform
ance
考虑
,
有一小部分
PEIM
存在并运行于
RAM
< br>里
.
这些
PEIM
是以压缩方式放在
ROM
里的
.
3.3.3 PEI Services
PEI
Foundation
会建立一张
PEI Service T
able
以供所有系统
PEIM
访问<
/p>
.
由于在
build
time
时
,PEI
Foundation
的
location
和
temporary
RAM
是未知的
,
所以一个
PEI
Service <
/p>
Table
的
Pointer
会传给每个
PEIM
的
e
ntry point
和部分的
PPI. PEI
Foundation
提供了一下几
种
service:
PPI Services:
管理
P
PI
以让
PEIM
之间的内部模块调用
更容易
. Interface
装载和
后续使用都在
temporary RAM
的
< br>database
中
.
Boot Mode Services:
管理系统的
boot mode (S3, S5,
普通
boot,
诊断模式等
)
HOB
Services:
创建称为
Hand-Off
Bloc
ks(HOBs)
的数据结构
,
被用来传递信息
给下一个
phase.
Firmware V
olume Services:
根据
firmware volume
中的
FFS
来寻找
PEIM
和其他
flash
device
中的
firmware file.
PEI
Memory
Services:
在
memory
还没建立以前为
memory
management
service
收集信息
.
Status
Code
Services:
Common
progress
and
error
code
reporting
services,
如
:
Port80
或
serial port
简单的
tex
t
输出以供
debug.
Reset Services:
提供一个
< br>restart
系统的通用方式
.
3.3.4 PEIM-to-PEIM Interfaces (PPIs)
PEIM
通过
PEIM-to-
PEIM Interfaces
(PPIs)
调用其他
PEIM.
Interface
用
Globally
Unique Identifiers (GUIDs)
来命名
,
以避免独立开发的模块与已定义的接口冲突
. GUID
是一
个
128bit
的值
,
用来区分
boot serv
ice
环境中的
service
和
p>
structure.
PPI
被定义成包含了功能和数据的一个
structure.
PEIM
必须在
PEI
Foundation
中注册他们的
PPI.
一个
PEIM
想要使用一个特殊的
PPI
就可以像
PEI
Foun
dation
询问以找到它需要的
Interface.
PPI
有两种类型
: Services,
Notifications
PPI
的
service
能够让一个
PEI
M
提供功能和数据给另一个
PEIM
使
用
. PPI notifications
允许
PEIM
收回注册
,
当
另一个
PPI
在
PEI
Foundation
中注册时
.
3.3.5 Simple Heap