|
|
一:平台初始化的多个阶段:8 O" _1 n9 r. D% B6 \6 |9 Q- U
(1) Pre-EFI Initialization (PEI)- G6 W" p5 m8 m8 w9 |% p
PEI 负责尽可能的初始化平台为执行DXE 做准备,# G, y- J' ^) R. v! w
(2) Driver Execution Environment (DXE)6 E4 S3 N& o+ u: e
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
. f3 n& Z& R0 I, P/ \
' U2 p' {# L1 M! v; H二:平台初始化的流程:! c4 }9 B1 d; t$ T
(1) I/O 操作, m; d( S- C' X+ R$ X! [; o8 A
(2) 内存操作6 g. ~$ E7 p2 n, i- u+ ]
(3) 配置PCI 配置空间
& }3 T( o) _6 e- H2 `3 G8 C(4) 通过PPIs 收集平台的动作。
; s+ @* j y: Z( ^; M" j4 L1 B8 K2 k- H2 N( H3 |* T/ y2 c( f
三:恢复平台状态:
- {% k$ E' X+ \- _, c6 b+ Z. IS3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
0 x9 a ~: W: NFramework 不知道以下信息. c) ^; ^, R D' l
* PEIMs 提供的Preboot 配置# W4 j4 f! T( l
不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程# k, @* r, @" ~6 f$ v- c N
如下:
! w- F* s$ f3 H5 E% h$ e+ H2 T h
7 H7 E6 X& m( L! O* k t
3 X. Z. o6 T% d# P2 g: L
% m/ V- g5 u: P# E3 A+ j5 X
四:S3 恢复阶段的执行流程:
0 B4 u2 C ]) a. _- J9 u5 p7 ^SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径( C, ~4 k! q2 L7 b' y3 \* `
1:PEI 和S3 返回的路径:
) Y* o- t% J" C3 U$ k" C$ ?9 jS3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
, N% W5 j" o. c7 o确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路1 T* W$ U C5 m3 d3 U7 r# |, c
径。
7 e! ? b7 L: C* a! b
8 Y- P3 {) O5 Y) ]! R% o& g# y2 s2:在PEI 过程中保存配置数据 R5 k9 y7 q1 Q! B/ I$ Z: }
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
* }# h, q7 W% E- q6 m' N g3: DXE 和S3 返回启动路径
( J- l. `! Q+ n在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径
5 y" `5 ~& D) P% R1 @使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大 h5 t4 z: P) ^- Y
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的
2 `$ x/ Z" I. D ?; j3 X- rDXE 启动过程就不需要执行。
$ ]2 i. v, h, yFramework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
) m0 J1 P" o# ~DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
) n- \9 \7 g) s8 l找boot script,* d! X( O; x" @1 Y& W
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息9 K5 @1 q( z: u% W! g3 h
* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程
/ S: [; P3 Y/ |9 o1 v J3 e中保存下来的。
. b; X( M5 O: V3 U* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,. f+ J; b- L" V
Processor chache setting.
4: Framework Boot Script:
, u P0 m6 h$ X! H/ y5 fFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
! F/ |, e: D' F/ Nmemory, PCI 和SMBus。
7 P; `8 w. \" p" n& \- j6 O可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入( I% v6 d& x/ q
Preboot 状态。
8 ?. E' e' t6 I5 t. Z1 z8 E/ D' g5:S3 返回PPI 和DXE IPL PPI; t G1 ~5 u2 m& I; t, ~
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
+ h0 `/ H% U, O1 W$ c2 RFramework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的7 T r: K3 i- G
呼醒向量处。在正常启动时DXE 是不会执行他的。
7 `+ h3 \ {9 ?/ U. S( o) F: N在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
8 w W9 j: Y/ N" |0 {6 x控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot* b$ l( e6 S: \+ Y1 K7 z
state.
" a+ h9 L/ ~. y/ A0 OS3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS/ X7 X4 q7 D; j; Y2 ?
waking vector 并且将控制权交给OS 来完成S3 返回。! w1 L0 F7 R0 Z6 W% D
在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国+ e' G% o4 k7 c" l: C% I$ {
入喜欢叫他为 上下文 ),使S3 失败。
8 E' f& \* u u! `+ {) b; s; ?7 t0 HS3 Resume PPI 需要知道如下情况:
; t4 `$ T1 D* y, O8 G0 F; n: \* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
. g+ @, ?" K# A" I l的地址。8 U& m0 V# ` y% y3 q# B
* RSDT 指针中ACPI 开始的地址和OS 的waking vector( U7 E x4 s6 v! `0 ]( I& n- i+ T
* 保留一段内存给S3 返回时使用。 ! t% [; L- d2 {6 {* n2 w0 A
|
|