|
|
一:平台初始化的多个阶段:
]( @6 M6 C2 I(1) Pre-EFI Initialization (PEI)7 P3 Z* |1 M, @" i
PEI 负责尽可能的初始化平台为执行DXE 做准备,
5 p6 n w- F5 I, e2 I(2) Driver Execution Environment (DXE)4 f3 F3 j; k2 G/ r$ y9 A% c [
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
/ y( c9 R. [6 a' t, q0 T8 _: C" c' |3 C$ _
二:平台初始化的流程:
5 J/ c" |- B& ?+ ]7 E/ l(1) I/O 操作
8 o" ?* g0 w, r c(2) 内存操作8 x; r! B& \% I! N3 T% j; }' B3 G6 g
(3) 配置PCI 配置空间
2 s/ T4 y& z. A t(4) 通过PPIs 收集平台的动作。 , @ [# S5 O, \4 ]: ~6 b6 e
0 O6 _" t5 v. G+ r8 T) @
三:恢复平台状态:7 ^7 B3 j t6 X
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
" A9 u1 S6 p7 Y6 HFramework 不知道以下信息
6 w: U. r. h- h& } M9 c& a; ?* PEIMs 提供的Preboot 配置
0 S' \$ P4 l( C1 a* }% u 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
- q/ G1 _% a! J. }如下:
# d$ O9 J, G: W1 d' x2 P
0 q% o5 N& C5 {
) j! p+ C" x# j, Z4 o5 H6 M/ m
1 v1 ?: K& ?# S/ L' Y* D$ w" [9 Q
四:S3 恢复阶段的执行流程:
' @& J5 ?$ K1 {6 Y. ]/ tSEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径' K! t3 B* z' T- ?9 z- x3 N2 \
1:PEI 和S3 返回的路径:( j6 u f1 n; ~, w( q) M( x
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正3 V8 w0 @8 J% ~8 C5 a D* t
确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路
! {# o$ k: u0 Y' L( a径。
0 i4 l) D( l7 T' J$ N* w
( ^' {* G3 c+ h e0 d- z2:在PEI 过程中保存配置数据6 A' A7 B* r: @8 R# G/ g5 m( Y
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)$ H; x6 J$ C; _& r
3: DXE 和S3 返回启动路径. w R" K* |- {& v+ A9 j
在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径5 n; i, r* Q" p j4 g# p' E" v
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大# z* Q, `; k+ `- S9 z. a9 f2 o
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的
M/ q1 Q G. G, F6 RDXE 启动过程就不需要执行。, G8 H) q% T" a7 e) n
Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在5 f( ^$ D$ ?/ z8 T+ q
DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
) R \" x3 Q ~找boot script,
9 y: x' M) C! n. r+ F找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
G" E4 F/ X9 Y8 o8 y$ f% f* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程2 j/ i# `' P1 \% h+ s5 G* z
中保存下来的。! O( C- x" H: d+ v j2 v
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,) p8 z- U) N& J1 W
Processor chache setting.
4: Framework Boot Script:
2 w$ J" p1 F S; |Framework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
: e9 ^! H! l% i5 n! P" `memory, PCI 和SMBus。+ Q2 G/ S8 R0 s; e! c0 P! s
可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
7 Y( v. K. ?/ @( HPreboot 状态。5 i h0 B% ~9 m" H
5:S3 返回PPI 和DXE IPL PPI8 n2 S6 h2 `1 J9 E4 M( U" c+ X& Q
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给! [4 P$ d" J4 s- j' C& J) Q
Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的' c3 N0 g& d5 x
呼醒向量处。在正常启动时DXE 是不会执行他的。; t0 Q1 a& b% K3 M4 J: h
在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
; N% Y' o3 e5 A8 m# T3 ^" F' q控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
2 N9 Y" a) I2 j) D- f) r+ X; Fstate.6 K: e w, L6 b
S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS( W. O" Y2 p* t: k/ X5 [; b
waking vector 并且将控制权交给OS 来完成S3 返回。6 s8 q1 n! F, V7 c
在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国
# a4 C2 @4 W$ `0 g: f0 c( G入喜欢叫他为 上下文 ),使S3 失败。
* S; y/ @! j+ _! g$ e7 p, [9 AS3 Resume PPI 需要知道如下情况:. h& {" ?- v3 T
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table: _6 h5 N8 G& y1 A4 a9 b6 y
的地址。
+ `, ~/ C4 b' U( @4 w* RSDT 指针中ACPI 开始的地址和OS 的waking vector
4 G! l+ s( t$ n* x* E/ [1 u6 ?* 保留一段内存给S3 返回时使用。
6 p) L7 _! Y/ ?& C. M
|
|