|
|
一:平台初始化的多个阶段:
8 l0 l5 G: a) l' x9 b* Y/ U$ g, \1 b V; S(1) Pre-EFI Initialization (PEI)3 x( }* Y; y2 H! t* {6 A
PEI 负责尽可能的初始化平台为执行DXE 做准备,2 `% z, M+ Q% _ c; k5 t
(2) Driver Execution Environment (DXE)
; M* z) D+ V' j6 T在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
: ~/ f* ?5 f* V+ X8 v* g; D$ |# E O
二:平台初始化的流程:
7 q& P8 M2 M. A1 W(1) I/O 操作- v b# ^, `: u+ D; ~' T2 |
(2) 内存操作
; Y9 T4 }, k P4 S' r(3) 配置PCI 配置空间 `7 q9 V4 m% k. }
(4) 通过PPIs 收集平台的动作。
/ Y# l) V0 c% ]5 ~' P8 A: H. ~% w2 c3 b' Y+ b$ w/ d
三:恢复平台状态:& N9 b! `) x0 n* P5 F' F0 D' s
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
& b9 J z- c4 E; ]% K. C+ UFramework 不知道以下信息/ | p, E) G0 ]# J$ ~! f# [% Q
* PEIMs 提供的Preboot 配置
1 H9 n& n/ @" S- y7 G! i1 [6 S 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
$ a1 Y! w3 Y- a. x如下:: D! g1 a; ^9 Y7 f
& [. W1 Y, p- P, T
. Y8 ?5 `' R: g8 a, V, r+ {1 h4 h3 {5 v# _2 U6 ^
四:S3 恢复阶段的执行流程:- x4 C% |7 [# v# Y3 V& o
SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
B4 c8 ~8 a6 F4 H1:PEI 和S3 返回的路径:, n& j% r3 k! V. @
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
$ T$ w0 @0 h8 H& g" R2 G确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路7 k: m8 x& F# l b. q; p! S. n) [
径。: Z4 r+ F0 c( V8 S
, A2 @1 c, f2 E, k$ B8 r
2:在PEI 过程中保存配置数据, f( F' y+ X1 X
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
& }7 U9 E6 S% M7 |' u3: DXE 和S3 返回启动路径) c2 R! ] D& C4 o/ ^
在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径
% v0 a3 {5 T1 B; A# J3 C$ a使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大
3 D( x6 j+ u5 ?; E T: K- _ }* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的. V, B4 U) C- ^8 F7 r
DXE 启动过程就不需要执行。8 x: _1 C, A9 g; |: ~! f
Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在 f- N& d/ K9 l) e: N4 M
DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查9 A: p9 V' Y& Q/ T/ f& {
找boot script,# d" F2 M1 `: i$ I4 H
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息! A D# n5 Z6 A% {+ c& e" e
* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程: J! W0 I# V. P
中保存下来的。8 o. x$ s, X" Y, W) ^0 i
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,
4 n T- Q1 z$ `0 t9 b4 TProcessor chache setting.
4: Framework Boot Script:
& R. w4 s# R$ g8 \2 ]- J; a& XFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,* @( {0 [ a7 C
memory, PCI 和SMBus。5 c# u ?6 [& B8 b% c$ j* H
可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入1 }( K. s. B* D7 q- t C' a
Preboot 状态。
; `. l& b% P' I7 [2 X! q5:S3 返回PPI 和DXE IPL PPI
% y0 \2 I: @: o% N3 l: ^DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
2 N- A4 Y) x# u" ^1 ?; l/ RFramework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
) G2 Q% o" S/ T X; r. l呼醒向量处。在正常启动时DXE 是不会执行他的。/ E5 V {( L2 }* P! M: p. |8 W5 S! r
在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把8 d9 o; E* ~# ~& ?
控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
( h. l [+ L `! K$ [state.
; R0 }$ F; x0 i6 ?) c+ sS3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS
' T) V. }9 C2 @9 c5 \' iwaking vector 并且将控制权交给OS 来完成S3 返回。( C( \8 y+ B8 f( A( v3 I& {7 Y' h
在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国+ v; L; V1 Q2 }7 x
入喜欢叫他为 上下文 ),使S3 失败。
$ X( T7 M1 c, ]6 S2 t0 U) H( lS3 Resume PPI 需要知道如下情况:
t! ~' V8 P' z5 z& }* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
5 _6 Q* e2 y# G, _的地址。
s3 Z, c& U( }3 w/ y" `9 ?, J* RSDT 指针中ACPI 开始的地址和OS 的waking vector
- s+ T; M; i/ U! `0 M* 保留一段内存给S3 返回时使用。 : K& c; {+ s! W, \
|
|