|
|
一:平台初始化的多个阶段:
% T K' w7 b: }/ y8 k% r(1) Pre-EFI Initialization (PEI)
! ^' G, T6 u f1 G0 OPEI 负责尽可能的初始化平台为执行DXE 做准备,8 P6 [' B. B; f5 |+ `4 j" z
(2) Driver Execution Environment (DXE)
. N% R4 ?8 n" q4 } g/ v在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。 ' j) H1 g6 p0 |
% A1 D: [% X5 l3 J& v3 U
二:平台初始化的流程:
3 i( b9 c% q2 O( V6 L$ Q4 l(1) I/O 操作. C, i8 |. |/ j7 b& d' V$ n
(2) 内存操作* T& U! x2 C: q& z( g" c, X
(3) 配置PCI 配置空间
6 A/ s: T7 x1 j(4) 通过PPIs 收集平台的动作。
& g/ A+ E3 g9 X5 \$ ?& k* i" {, \3 N& l" v, W, v2 c
三:恢复平台状态: w& i- b! M% ~, C6 _
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
' m$ u# h4 d2 RFramework 不知道以下信息
8 s: X0 X9 N' I, S( e7 A1 a; o* PEIMs 提供的Preboot 配置
. Y, Q# r C1 F 不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程2 H1 Z$ Z3 B2 f3 x/ H& H# P& V' f6 F
如下:2 e- A3 g; }9 J9 o5 B2 u$ n2 z
+ j1 J k0 H. h3 q- R9 ], k
' c8 i4 ?) N$ O$ O
% c9 h' w' ^4 L" ~* w四:S3 恢复阶段的执行流程:
- u% f& E' B0 q, w- _SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径
& T7 y+ L! U5 J1:PEI 和S3 返回的路径:
3 k8 U D1 z. n; j5 [* ~ XS3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正
, \& f; z7 i; ]' X; |2 t" U4 b确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路
* E$ F& t0 D0 q2 o6 ?" ~* `径。
5 {' E/ g( u. W5 P, C) Y
! d' V& H. l5 w& f, ^
2:在PEI 过程中保存配置数据5 Q( y) M; n1 q, p& ]$ k& H }
有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)) |8 V# Y4 V4 x# M
3: DXE 和S3 返回启动路径
1 R0 ~0 ~" p) X5 R, y2 P# ?% ^4 |* c在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径2 X+ @/ K% D) [4 W' |# r! @: z
使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大
9 Y4 q& W# X# T& d# A* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的& W) h; S7 Q# @- [
DXE 启动过程就不需要执行。
2 v7 p3 y( P, ~9 B! ]7 k1 K9 dFramework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在
, {9 K, p' z, S ZDXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查
' m# a3 y. c% n/ c. C8 t2 b. U# t找boot script,5 e2 e% P/ @! a& F/ ~6 M' A4 _
找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息 G+ a$ b8 L) w, L: f& _2 J9 _* ]: ^0 |
* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程
0 w; p" V- J% O中保存下来的。- E+ a+ l% R3 h& a
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,
, v g* r; j5 r2 }. t, DProcessor chache setting.
4: Framework Boot Script:; |) I0 X7 D9 S" m; j! ~
Framework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,
$ i, q3 w* X3 U( A, |: G' Umemory, PCI 和SMBus。 |- U0 |! o, H! M2 V$ h [
可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
4 V. G& f1 x) n+ LPreboot 状态。+ C! B$ m7 l' I, w, n4 ?$ q& o9 h. o Q
5:S3 返回PPI 和DXE IPL PPI- c8 w! t) c7 \
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
4 q" @6 o8 W# C( N$ g+ ^3 y! R; hFramework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的
3 y7 J1 r* O, j" q4 ]呼醒向量处。在正常启动时DXE 是不会执行他的。
$ Q9 M5 N" x: ?8 S$ k/ o* w在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
. ^; z* b9 k$ L: i/ @控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
* @1 I, `) c% C, m8 e Kstate.
, z" M: m6 ]) h& `0 qS3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS0 d) d0 V9 f, B
waking vector 并且将控制权交给OS 来完成S3 返回。
4 o& P3 [2 N. x) n- ^( q在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国
1 E7 ~1 k) u! g3 ^5 F& y入喜欢叫他为 上下文 ),使S3 失败。
* J& ~/ t( N; _+ S" rS3 Resume PPI 需要知道如下情况:
. r% Y: J ?3 x% C0 H1 Y* W/ b* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table
, o, f- I; w6 j- P, C的地址。
% O; Z% O! y( l* } G* RSDT 指针中ACPI 开始的地址和OS 的waking vector/ c; W" V$ `( t6 d8 S
* 保留一段内存给S3 返回时使用。 0 k6 m5 C7 c/ }, q0 y+ B
|
|