|
|
一:平台初始化的多个阶段:) ]6 \/ ^* z9 ~; h3 @
(1) Pre-EFI Initialization (PEI)0 k! I& n* g2 }, L& \+ q% [0 d
PEI 负责尽可能的初始化平台为执行DXE 做准备,) i9 U {# m2 m% P6 ?
(2) Driver Execution Environment (DXE)/ d. |$ C" z1 k/ S. `- l
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。 - h2 ^% z! c" a( B3 a# ]
P& v1 O, s6 V0 @+ y7 C
二:平台初始化的流程:, n; N$ a4 ^% x) Q2 ~
(1) I/O 操作1 I3 s2 Q" H) L# \9 k
(2) 内存操作
3 a1 r! y L4 G3 I(3) 配置PCI 配置空间$ F; A" ^6 v% O! J, r, {( T
(4) 通过PPIs 收集平台的动作。
5 J# c5 k2 a6 S& @% y7 R, h$ o# x; i& B# | w5 [8 }
三:恢复平台状态:
( K# L6 `. k. r# t5 K, `7 I/ p1 ZS3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为4 V2 E# ]# M( z$ s1 {9 i
Framework 不知道以下信息; K0 F& z7 Q7 P3 s$ B' v7 q
* PEIMs 提供的Preboot 配置3 N2 U2 E4 |) N; d- O
不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程+ I9 H$ m* @) h$ J
如下:0 e& w8 n: D- G2 t8 h, V
/ P8 l* S" u6 X) s/ j& @) _
- _+ f4 F5 | w+ [
% @ g! E- n8 s( v! R$ e# a
四:S3 恢复阶段的执行流程:
y( ]* ^' G' c1 K k1 |5 kSEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
% R% K: `9 u7 u: {1:PEI 和S3 返回的路径:2 |+ E7 j7 i) ]5 T! |0 ~
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正/ \/ ?8 V# w% t' U3 ^- d$ u; _8 N# F
确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路' l9 }$ i+ E, i
径。
2 R7 Q' @2 p! `; i0 [
6 ^( |- x; n/ F- I
2:在PEI 过程中保存配置数据1 @+ C8 f$ ~# X
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
* L( [8 R4 N# V+ w( V$ h3: DXE 和S3 返回启动路径
$ t0 Y$ _) H3 T6 h9 [3 d, k: X6 _" _在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径7 E8 S' Y! h0 q1 T
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大
& D# C3 Y z' y2 d/ Z" S* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的2 G, P8 R. c R6 ^1 w5 ^* X4 s |
DXE 启动过程就不需要执行。
# z' ]5 f: e. x' ], MFramework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
' y+ R( K" c8 c9 L1 F C$ U! qDXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
# {6 H/ V! Z% A. _8 V7 B找boot script,
r* n, c. J* z z找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
8 N4 I! \9 n+ E( V+ ^* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程
( m2 X% Q2 ]2 f& ?7 E中保存下来的。# Z9 s9 t' H* i9 N
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,( b: z6 {* C+ `& H$ [. v1 {
Processor chache setting.
4: Framework Boot Script:
7 C' o' D( G! ~2 E, dFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,8 o2 v! G* L' X! j2 Z0 O4 ^: V0 P
memory, PCI 和SMBus。7 V \/ I6 j' P$ y- z+ s6 ] G" [
可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入7 {5 R* B, |) S+ w. d7 ?* \
Preboot 状态。) C( a9 J( }( L& o
5:S3 返回PPI 和DXE IPL PPI; j3 O) I; X3 U6 Z6 s
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
! ?+ d! S8 t" B, |- `/ Q$ fFramework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
. w& Z" i+ G: I呼醒向量处。在正常启动时DXE 是不会执行他的。
* n" M' I# `$ K! K2 Z7 c在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
# Z* H2 U2 U; y# O, B7 n* b控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
0 ~" v* V/ j3 J( ?+ a9 [# y+ Estate.+ W5 o: d/ I9 n4 B5 i( \
S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS+ f6 K- W0 N+ C- ?, y
waking vector 并且将控制权交给OS 来完成S3 返回。
+ ^! E9 \* F9 w: a! Z7 l- D在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国
7 c7 q1 I( Y& \9 r# s" R" t [入喜欢叫他为 上下文 ),使S3 失败。
- d2 v- y# _! i. N& Y/ L2 H( H/ vS3 Resume PPI 需要知道如下情况:; W* H/ p- h* o/ e
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
( B, Z: W% D2 k; b- b* A的地址。! m: d6 q- y2 j& ^
* RSDT 指针中ACPI 开始的地址和OS 的waking vector7 {+ l* K. j! u- ?
* 保留一段内存给S3 返回时使用。
& d; D8 E7 I6 K. ?) X F: P
|
|