|
|
一:平台初始化的多个阶段:
' p9 T) ^( @% u1 X( E5 c9 C(1) Pre-EFI Initialization (PEI) G9 G8 i2 D3 X4 G% S8 @
PEI 负责尽可能的初始化平台为执行DXE 做准备,
. z6 \7 d/ f' T% n! @(2) Driver Execution Environment (DXE)
( s; a0 S5 G! ~5 ~. H在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。
( c- i8 f- N9 p% m2 z3 ?5 V& K- s% K/ W) s3 [3 w
二:平台初始化的流程:& q0 j5 P9 U; _4 p$ d# N3 G
(1) I/O 操作
2 X8 O0 l) s6 @. n9 [(2) 内存操作
, M: Y Q) [: t C, U" ^/ l' T(3) 配置PCI 配置空间
- I- O! V$ S3 T* Q(4) 通过PPIs 收集平台的动作。
6 E$ H9 a! \( e* b" t4 ^( z- m8 j4 b
三:恢复平台状态:8 H/ U4 y8 `( {# Q& l9 M) ?
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
% A2 \9 V( K" v0 QFramework 不知道以下信息
& O) i9 d% X. J' ^: \- C1 a* PEIMs 提供的Preboot 配置
/ F: \; h7 h0 A; c 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
+ o8 }, e" y* a$ K2 _- E如下:
. `7 `% E" ^+ x, O' O4 R7 r
o5 \/ {2 z" u. L
! G6 e: d5 N9 Y3 J, @% U% t( z% ]3 ]# c& j+ r: R6 v; \
四:S3 恢复阶段的执行流程:
* P8 s/ ^+ t4 GSEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
! o/ {5 O0 X: M, t* x1:PEI 和S3 返回的路径:+ w. g6 k5 {. u2 S! x7 |" O0 A
S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正' a& V( z( q/ K. G& G1 V! R6 ?2 a
确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路' u9 h8 S- I6 ~, I
径。, W1 Q; c4 E4 {( t% C/ ~
9 z# e+ y6 c3 ]% M6 @$ B5 D4 ]" G
2:在PEI 过程中保存配置数据1 @; J4 D3 W, z2 ~: {. M
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
) ^% u, j/ I% L3 u! A3 n- R3: DXE 和S3 返回启动路径
) U6 p) _3 ~, n& N在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径
; d, K+ u+ Q4 Q使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大! s3 `: V, y- a; a
* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的( f, U8 V* m$ w! H+ I
DXE 启动过程就不需要执行。1 y- V( y A7 Y2 X- v
Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在0 h1 T) X+ O/ Q5 F, H. c4 f4 ]2 M9 `
DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
. N) ?- L7 p0 R$ r" O找boot script,
8 V) v4 y1 S3 \5 _- {7 ^) z找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
# w& l( p, j, q7 F9 c* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程" z! Y4 v2 l3 \ @1 d4 K" `0 R$ E, X
中保存下来的。
* [: g3 Z, L0 }8 }! O: n* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,
& p q, _6 b) T" R; `# AProcessor chache setting.
4: Framework Boot Script:
! E5 }7 E3 ~8 cFramework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,- i6 g* j7 U" ]$ x/ M8 h
memory, PCI 和SMBus。
; D8 j; x% j4 O2 ^可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
6 B1 J& J) |, v! \6 ?Preboot 状态。# x i. R( ~3 G- C: T( B* x
5:S3 返回PPI 和DXE IPL PPI: `4 {; A: } q& J* _ C/ T( ]/ r
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给1 {& j& o V- V2 S! U+ Q
Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
) u4 Y- r! F6 H呼醒向量处。在正常启动时DXE 是不会执行他的。6 y& v& Z2 j$ v- v f0 q+ | u/ S
在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
6 z3 s- K) T0 h% m$ I/ Q2 S3 ~+ Y控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
0 X& \! p) r/ i% s$ y g" d) z# Vstate.
2 C9 X" o8 w$ C+ PS3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS
8 P8 [- ~, l5 K. s$ G' O" V( Bwaking vector 并且将控制权交给OS 来完成S3 返回。- g& ^- V9 ]) L0 J; V% ]; m
在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国" k0 x: y2 p/ g8 `$ F2 \; H* @
入喜欢叫他为 上下文 ),使S3 失败。
/ W$ l: d3 Z& P) HS3 Resume PPI 需要知道如下情况:9 V6 @2 R6 l0 d/ X- E
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
) y3 c7 A7 s6 v) k3 J2 B# s的地址。
% z. ?. y, d! H( b0 B" \) W; }* RSDT 指针中ACPI 开始的地址和OS 的waking vector
# ~8 J" V5 A+ O1 J* 保留一段内存给S3 返回时使用。 / S/ [/ F$ K# B0 S/ ~4 B
|
|