|
|
一:平台初始化的多个阶段:4 \; E2 g7 C7 Q1 M! T; c2 \
(1) Pre-EFI Initialization (PEI)" S6 G1 y. O* k8 d" L$ X$ v
PEI 负责尽可能的初始化平台为执行DXE 做准备,3 u# h* ~' a* z. C
(2) Driver Execution Environment (DXE)1 y& a" _7 z$ }+ Y& `9 j4 v
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
; {: w7 \: j' v7 b1 n
+ v" z4 \# i3 D" h I/ L二:平台初始化的流程:
; B: g& k& y1 T, c6 R+ c(1) I/O 操作' l' S& ]/ ^" B# v W, U- {
(2) 内存操作5 A, _: L# h J9 c8 ~# l4 v
(3) 配置PCI 配置空间
+ T/ z$ q* t, C: S" U+ x* } }(4) 通过PPIs 收集平台的动作。 9 e/ O" U6 C3 R& V# W/ `! T
: {- Z0 U8 h2 u* X7 q4 \( b8 n5 W三:恢复平台状态: f; |2 N5 c, e5 R
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为0 {' b4 l& q) A' Z1 a% o
Framework 不知道以下信息* P+ l( {" P4 F+ d0 g; f7 G
* PEIMs 提供的Preboot 配置' d% k! @. y# D) M
不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程9 `1 q5 d: f" [: S6 j* h
如下:
0 k6 u& M U* w: {8 P/ H3 r
% h7 A4 s* i3 c$ X8 Q
1 Q+ ]3 Z# k+ t8 u0 h1 B" ~% v
: h. X. A& g5 {5 D8 M& a四:S3 恢复阶段的执行流程:
: f9 a" ]9 U" I1 Q2 ~# fSEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
: d1 _4 i7 T3 x; e1:PEI 和S3 返回的路径:" ~" L, a# p4 R B, K8 o
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
* `0 g6 D: N7 `7 E7 E6 r确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路
. D; I, Z5 A9 z! y: q c径。5 P/ b& h8 I j3 s% O% M- t
# \' T7 ^2 C& H2:在PEI 过程中保存配置数据( V) K3 W' K0 B z3 E! D/ K
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
# W' l; ]/ z5 l/ R1 w: S3: DXE 和S3 返回启动路径
' s; J+ b6 u& h在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径) e$ d/ m7 D/ ~4 D# [2 b$ R+ ~
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大! \. u+ R5 J/ q6 i* }
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的
* i& ^/ Z o- A- pDXE 启动过程就不需要执行。
+ r+ t4 g/ ^* q, M, F, R. ^Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
, t) T& Q Q' tDXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查4 I. d R& Z" [/ X1 c
找boot script,
3 P) v7 `$ H, F* b找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
- }8 V4 q) V; R! n. ]! K- Q! r9 M* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程, c( h* D, a/ g' F
中保存下来的。
. o6 j: g/ x- n" W% N$ l; c. {* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,8 U6 N3 D8 n9 |0 S8 u: K
Processor chache setting.
4: Framework Boot Script:
2 t- }: R1 k/ v# R+ c4 U5 Z8 wFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
( N3 N5 Z4 t0 [) V7 Lmemory, PCI 和SMBus。
7 W% u6 a$ H6 f/ w/ P* z可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
1 W# O' Z4 J, X0 ^& d+ e, e* tPreboot 状态。
0 R; Y' z) @& `0 U: a& X; I5:S3 返回PPI 和DXE IPL PPI2 d' B" {# D# L2 l( j2 U
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
2 P4 U% Q& d1 y5 P' gFramework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的* N# m& S9 [: S7 ~# \6 k) x1 J
呼醒向量处。在正常启动时DXE 是不会执行他的。
Y. y; }$ j6 m! ?' D3 ^* }" J在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把' Y* j; @/ V" e
控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot2 F& S" ]! }7 r, t8 [$ F/ l0 l( Y
state.% |- e ^: y0 L9 d/ ?5 s5 B
S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS" z8 P4 Q" U ? u5 Q0 H; k4 \
waking vector 并且将控制权交给OS 来完成S3 返回。
) {& C/ j2 a2 A在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国$ V; {: B, D2 ^3 Y7 V. P
入喜欢叫他为 上下文 ),使S3 失败。- ~. r6 F7 _3 t7 y
S3 Resume PPI 需要知道如下情况:/ W5 |# l" Q/ Y- G
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table, k3 v3 F4 w+ Q
的地址。
" \9 e3 e6 c- w- Y' q* RSDT 指针中ACPI 开始的地址和OS 的waking vector9 p+ H+ H a4 j3 T0 f! H. M
* 保留一段内存给S3 返回时使用。
" j% }% a1 C6 V2 C! U" S
|
|