|
一:平台初始化的多个阶段: K0 N# a* Q$ N/ P- y
(1) Pre-EFI Initialization (PEI)6 S& \ D( X' f1 ?1 t$ A' a
PEI 负责尽可能的初始化平台为执行DXE 做准备,
& O) J3 J" n/ G6 C( b1 `+ J- [(2) Driver Execution Environment (DXE)' y# x `, f9 G2 q: D4 ?+ E
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。 & i5 m7 X% l/ o7 \; L @! o
; _% C3 m$ T0 _$ W+ q9 q
二:平台初始化的流程:
' ^8 Y/ k0 u: h. e(1) I/O 操作0 x$ N+ r }. r
(2) 内存操作
( T0 a) o0 I K4 h/ X1 p+ l: {: S4 r(3) 配置PCI 配置空间
6 [% n$ H9 g5 I2 W& }1 t) v o(4) 通过PPIs 收集平台的动作。 . o, H* \0 x" C
/ _% r9 ^2 B+ T4 `
三:恢复平台状态:
9 e2 O5 E3 G3 u8 I4 VS3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为* K( g2 f7 }% L, z$ H8 P; ]' k5 f
Framework 不知道以下信息 a6 P6 u2 n, T
* PEIMs 提供的Preboot 配置
$ } T0 Z, g6 X+ C& w* u 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
( O4 Z8 |1 r+ F; K3 ]如下:
- z; N `8 t/ I% Z; u
' ^* h: ^1 E7 }+ Z4 L y- m
1 {: i: `5 N, x0 \( L
) v- J9 {% ~5 V2 M$ D7 A四:S3 恢复阶段的执行流程:. n0 W1 u: X/ s- z& E) X
SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径9 q; |1 { q+ k
1:PEI 和S3 返回的路径:: q3 I" G! F( f8 o( F$ c
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正, D; Z: p' j& R) M
确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路7 Y$ y4 @( N7 _/ |& p8 }9 W$ w( o
径。
9 p# I: b+ ?; l4 {# v+ j) h
5 f' C% g! |) p( D1 @, v2:在PEI 过程中保存配置数据6 [3 ]2 \2 g3 q) m
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
' a% G3 a3 n, c, E3: DXE 和S3 返回启动路径. V5 P. B) [6 q$ k
在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径
; ~2 b" H6 E) F5 [. A使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大% X7 p5 t! j% r# v
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的2 ], w" O0 p3 n& q8 {. m; \
DXE 启动过程就不需要执行。- y" y6 e! e: L8 f" Q
Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
+ U/ k8 [6 k& `. J9 RDXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
9 n0 L; `$ W/ `4 n$ e6 x, L6 [找boot script,; u5 D4 X; f8 _5 n4 e; \& g5 y
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
8 ~- J& B% g# N# C* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程5 }+ c" f1 ~$ O9 g$ A3 l- a
中保存下来的。
( ]: u$ p- p2 i- u: U5 Q* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,% |5 ], m" G7 Z
Processor chache setting.
4: Framework Boot Script:/ A, a" r& @% Y" h' D* h# t% ^, L
Framework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
# D, }$ F: p/ s. \. p$ [% ^memory, PCI 和SMBus。
( h+ N) j( b3 Q: S {可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
$ l4 s' t. v. `6 e* APreboot 状态。
5 T6 d7 P5 a+ {3 E1 q5:S3 返回PPI 和DXE IPL PPI2 H- I$ { z0 c4 F. N/ T
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
- _8 S6 z+ K. F7 }- _Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的9 e# E% z. _: Y% E) j) F/ J4 f3 l, R( N
呼醒向量处。在正常启动时DXE 是不会执行他的。
, b& X7 |+ A; D1 I4 n3 B& B5 Q在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
& ^. i& w3 u2 }2 h. L! p控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot: R6 q5 ^- O9 |! z' v- h
state.) F. I' ~6 N" _7 v" x( W
S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS! M H3 b6 {# C2 r- h
waking vector 并且将控制权交给OS 来完成S3 返回。: i. c4 T* h4 z& G! e5 Y: R
在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国
# |7 R, r+ ^+ ]1 b$ j0 Y6 e入喜欢叫他为 上下文 ),使S3 失败。( V) l6 F: m! f$ p9 ~ _3 O# C
S3 Resume PPI 需要知道如下情况:7 Q2 K1 P' d+ U, y' P/ y8 u
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
' T- W1 F3 Y; h/ D: \; p9 m' _的地址。
* w! p, }# j" g; a) q1 w* RSDT 指针中ACPI 开始的地址和OS 的waking vector" f% b0 L9 h8 H( o- Q
* 保留一段内存给S3 返回时使用。 ! x" w7 L- m8 |) ~0 y
|
|