|
|
一:平台初始化的多个阶段:
7 }% M1 s7 B3 `) h. q(1) Pre-EFI Initialization (PEI)! D) `' T3 |5 ^3 [
PEI 负责尽可能的初始化平台为执行DXE 做准备,2 i# }7 O$ g F" L% J8 ]
(2) Driver Execution Environment (DXE)
5 A9 J1 a+ @9 b2 R6 W在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
+ t' c7 k+ |7 \3 i3 q
5 a' m, n# n( p- x二:平台初始化的流程:
, N4 `. H5 i+ S9 R(1) I/O 操作
7 k! c) z5 y5 i v: x2 b(2) 内存操作
) Y) w$ D5 C2 q7 q1 Q& q0 r(3) 配置PCI 配置空间" x6 j+ s/ \9 ~) R6 b: y
(4) 通过PPIs 收集平台的动作。 0 T5 [) }( c4 w0 c3 W) x
. D+ V' V! a- Y, V% o
三:恢复平台状态:
. ~8 L5 H6 ~ R2 I5 K! i' A; u5 vS3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
, ^8 y$ b9 B% p& m" C0 Z. qFramework 不知道以下信息
. \5 F6 x3 c' t s8 P( W: W- u9 V2 e* PEIMs 提供的Preboot 配置
& v) p- \; P+ u& }* A& l 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
5 B$ a- a3 l+ C7 b, l) [' r. k( i如下:
' m5 G4 q( k* P
* t3 U; h/ M* s2 |. R- ]
" |- V) M. S5 i; H* M4 x
9 }$ D, ~) r+ j( Z% Q2 R" ` {四:S3 恢复阶段的执行流程:4 d& Q9 j& o% w9 q% ?
SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径8 S- ^/ q! \7 W; }+ k- e
1:PEI 和S3 返回的路径:
% E8 C* W* O2 nS3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
, G5 K+ i9 G3 V% A9 y. `确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路0 j# v" i2 {" z, b$ `
径。
8 ^3 M6 J2 _- W# ]4 k
- t/ W, L5 d4 v
2:在PEI 过程中保存配置数据
/ l6 C5 v, Z# l$ n( ~有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
" |4 ~% p. ]9 q& k4 @6 ^3: DXE 和S3 返回启动路径
6 D/ _3 `8 X$ C" e, F在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径! V& E. J" Y1 x7 s; f5 I1 X
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大( x7 v4 t, |) x
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的9 K+ E9 Z6 k7 k( X& R3 `
DXE 启动过程就不需要执行。
! V/ Y& f4 \7 k# {! KFramework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
: _; S0 s, [% JDXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
0 Y/ e3 \1 Z# K# r7 J( D找boot script,; B: U! y B1 U+ i; f
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
# L) z, p) f- z: G* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程
" d) w8 O; T' l1 Y* |* |7 R中保存下来的。
& W2 _/ F+ a; t$ W: W5 ~( g* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,/ U4 }. r0 p ?7 u- h
Processor chache setting.
4: Framework Boot Script:% U6 R+ \1 Z L e" ]6 B N
Framework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,* m1 ]0 C" C' t5 W* u
memory, PCI 和SMBus。9 f B- ]0 g6 F2 z9 ~* q2 l4 e
可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
# W2 R- ~) R: q* d! b4 Z3 CPreboot 状态。" `& R8 r* i5 L( K2 M5 e
5:S3 返回PPI 和DXE IPL PPI0 \" v9 C; y9 N0 [
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
5 o9 M6 ~2 f# L+ M/ a4 \Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
/ u8 b7 g: S9 n p% @; p呼醒向量处。在正常启动时DXE 是不会执行他的。$ H- v; r" i! A4 N8 K2 x3 V6 D4 D: B
在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
( A. o9 K3 c2 ?& W控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot6 L9 g# Z9 E# G1 n5 C: v/ W) ]) M
state.
9 X2 y; R, \! H9 R& ?. {S3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS
1 i l" V/ m" Z5 L( m& lwaking vector 并且将控制权交给OS 来完成S3 返回。
+ Z, Z9 F% Q8 A7 y& |9 Z在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国
9 M& g% R4 S0 c% n4 x* Y3 c入喜欢叫他为 上下文 ),使S3 失败。! e$ Q" C6 c$ J R/ [( G$ g% i
S3 Resume PPI 需要知道如下情况:! _) d+ d; H) R# B5 B" w1 v! a8 c
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table- @* O3 C* E/ ]9 f7 m) P, W
的地址。
! M. y% i; D% @ G) N# I* RSDT 指针中ACPI 开始的地址和OS 的waking vector$ W/ a" B; o( I9 }
* 保留一段内存给S3 返回时使用。
6 _1 I" I& Z( D# ^
|
|