|
|
一:平台初始化的多个阶段:
3 P4 A9 j2 h$ }8 ~! n, u(1) Pre-EFI Initialization (PEI)
3 J8 A7 i' _* g& C# U" s, Y* D( GPEI 负责尽可能的初始化平台为执行DXE 做准备, O4 u; i0 B, S& X% J! H
(2) Driver Execution Environment (DXE)
& Y6 a; P' |" P在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
( e- |5 ]1 _: x+ D5 f
2 A% k1 B; y N, n二:平台初始化的流程:
( a# [1 \# d% L4 y(1) I/O 操作9 c/ U. e3 w; X" `! C- _
(2) 内存操作
5 U; d' n" h( U9 Y+ K9 `(3) 配置PCI 配置空间
9 _6 C+ w1 i0 A(4) 通过PPIs 收集平台的动作。 / ]+ a( i% p, m1 H$ }* Y- ]! \+ S
0 I) h2 v" ^& J( F0 D1 D4 F7 E" Q( Y三:恢复平台状态:
d4 z* A, E/ O$ Z. z& qS3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
5 k# Z4 C& }, B* p; KFramework 不知道以下信息
; z% ^9 r9 k5 O5 j/ R. K* PEIMs 提供的Preboot 配置
# s# K3 Z) b' ?; c4 K: j 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程) ]( p2 G) z# v
如下:
: M. q# O3 ~" V! ?! y; r; G( z
/ ?; ]: X, d$ U3 z9 ]$ B- b$ y, M4 {1 N1 L( T
1 W$ [$ ?& S. q
四:S3 恢复阶段的执行流程:
I% T e" M5 H' e; @! ISEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
. T& X1 L" F0 m& D. ^1:PEI 和S3 返回的路径:- J- B) v& D# @, }
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
6 x$ d% S5 U0 K0 N3 c/ u. x! ?确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路
; ]! @5 `) f3 `- ~5 x, k2 c: d6 `: G' U径。
9 f% E( s9 E. M q! d7 X/ c
/ C9 g3 n4 Q( l" @2:在PEI 过程中保存配置数据
. h7 \, D1 M4 C, f2 i& K有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)% I7 R1 C4 j9 P7 a/ `2 p- E0 w( e
3: DXE 和S3 返回启动路径
; @2 {4 _! m1 Y: H l; f* r# o在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径2 w2 O7 Y# G0 n( [: p6 M+ E% T Y
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大: q8 P Q0 @5 a$ ^
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的- w8 F7 w/ I. H' P ]
DXE 启动过程就不需要执行。
9 X, y# |% p' A9 @/ a0 ZFramework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在7 R6 d7 n1 a7 i; X& _7 K4 W4 r' m
DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查! \/ y7 R2 q9 B0 ^9 h7 n( ]! M- o
找boot script,1 K' {0 v# _3 Z( x0 w. f
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
4 x! ?$ ^+ d" z" _* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程
' K* q3 s* D, O* }8 A# J" Q/ Y) d中保存下来的。8 |2 @6 u1 U6 p* ^ t. \5 Z9 S2 n" N
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,
3 F2 ?" L; N5 Z ?" {. hProcessor chache setting.
4: Framework Boot Script:
4 w9 ~7 y8 b' L" G( K# h3 ZFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
: B: [7 {8 ]+ t6 G( fmemory, PCI 和SMBus。
4 {( A0 X6 o4 f1 ~5 D可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
! ^, I% h# p5 p" ZPreboot 状态。
0 ^% m# v( M/ \% |8 \5:S3 返回PPI 和DXE IPL PPI
4 w# z! u. f% R, X1 s! Z4 |0 nDXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给. e9 B& C1 R2 F1 k
Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
' {, m+ s F6 }. h呼醒向量处。在正常启动时DXE 是不会执行他的。
7 o" k( \/ u; m在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
! [1 Q' j6 ~# _7 I4 i. g7 V( t7 A9 O控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot4 j8 c, m: h z: _
state.: Y& _+ B+ s5 b- |0 v* y$ g
S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS2 @7 h$ F- U# {5 }& S2 ^8 D
waking vector 并且将控制权交给OS 来完成S3 返回。
: E0 J" b% l% }2 b8 N0 O在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国: k" m. k X! T( f' n( j
入喜欢叫他为 上下文 ),使S3 失败。; L5 H0 b, C9 t/ D1 r
S3 Resume PPI 需要知道如下情况:
% T5 K, L, s; B" t% z) ?* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
$ ?. S4 ?5 G2 T2 b7 [, `5 x' v/ L的地址。8 n7 W2 B7 a8 E5 R1 ^: D6 M
* RSDT 指针中ACPI 开始的地址和OS 的waking vector
% A0 m% \/ S1 D6 Y p" F1 e* 保留一段内存给S3 返回时使用。
1 j( p% ~6 r+ \' j8 V2 }
|
|