|
一:平台初始化的多个阶段:
% q/ D; V8 T7 n) {0 i(1) Pre-EFI Initialization (PEI)
# Y8 a" N u* p. m5 X% n- jPEI 负责尽可能的初始化平台为执行DXE 做准备,4 B' e `. R$ n2 S7 }0 ^
(2) Driver Execution Environment (DXE)( O; U7 _7 B& z& j
在DXE 阶段可能会改变PEI 初始化的环境,有些参数会被DXE 重写。 + n) M0 H- }! V2 _
9 s/ ?1 a2 e% p
二:平台初始化的流程:; S% F3 ]1 S5 t! _
(1) I/O 操作% C t" n) p7 t8 Y6 y# [! ]9 d: i: p
(2) 内存操作( {! S2 T- i) [
(3) 配置PCI 配置空间- ~8 k$ w r/ W6 i. _; n, {
(4) 通过PPIs 收集平台的动作。 7 O3 ?1 ~. V) \, ^6 Y$ ` j0 x% u
' H+ X3 B3 W' p- T! K' h7 m
三:恢复平台状态:8 n3 v8 S. t% ^
S3 返回是加载平台的Preboot 配置,加载的过程需要通过所有的Framework 初始化,因为
7 ^ y7 n. T- ` r& Y- O; m. kFramework 不知道以下信息5 d4 D5 }/ K7 \! k
* PEIMs 提供的Preboot 配置0 Y: h% |0 G, W! j
不同厂商提供的驱动最后Framework 还是需要像正常启动一下执行一次,执行流程
' _+ }( [- M0 E! k( P8 Y. V8 Q如下:
4 u, v0 q5 F! r# q4 f6 Y
# s2 {+ j w2 u$ Y. p/ U) x
5 W0 B" k5 u# P q% T3 k+ k1 A: }- K8 N$ `0 D
四:S3 恢复阶段的执行流程:4 g* k5 N' D* w# w# x
SEC 是第一个被Framework 执行的,因此SEC 保存了S3 返回时的启动路径9 y5 ?3 |" t6 a; \
1:PEI 和S3 返回的路径:
4 r$ ^ Q& U. p6 x! x! {S3 返回时Framework 将加载PEI 的端口配置。PEIM 可能调用相应的PEI 服务找出正0 i1 p9 }4 B9 g8 g2 M, _. v9 [
确的启动路径。PEIM 会保存配置正常的启动过程,并且利用来配置S3 的返回路$ P8 ~4 z& s' |9 y3 Y
径。
Z: |! @# e, ]+ x L" p
& [4 B! V Y5 T0 f2 _( N; |: j4 B
2:在PEI 过程中保存配置数据
6 r6 D1 n9 D7 l有很多种方法来保存配置数据,如firmware volume 变量,nonvolatile storage (NVS)
7 i5 n6 E* H- P/ r+ |$ ~: k* [3: DXE 和S3 返回启动路径+ Q9 l9 N0 _3 m; @( o' k
在DXE 阶段,有多种DXE 可以使平台到Preboot 阶段。让DXE 进入S3 返回启动路径
Z% \! @* E% B/ ]+ m使DXE 驱动存在一定风险,原因如下: * DXE 启动有很多服务,这使它变的很庞大
& d7 W G8 M. r* 加载DXE 从flash 空间需要一定的时间。
如果DXE 在启动过程中能在NVS 中保存,那么DXE 需要的大量内存和复杂的
) K# }6 S& n2 ?( x; EDXE 启动过程就不需要执行。
# S: n7 H5 e, V' a. _Framework 提供一个boot script 让S3 返回时获得DXE 的所有信息。这些信息是在8 e) \) g0 {5 H. ?$ v( q, Y6 e
DXE 驱动正常启动过程中保存在平台的NVS 中形成的。在S3 启动过程中到NVS 中查4 c7 B" y6 s1 ?( I* O
找boot script,
6 J" d; O9 c5 J3 H' T" a. \, Z找到后加载这些配置。 * ACPI 要求BIOS 加载chipset 和CPU 的配置信息
% C' v4 @3 j- B, ^7 K* Chipset 的配置包括:memory,I/O 和PCI 的配置。这些信息是在DXE 启动过程! e+ R- D5 z& U, A
中保存下来的。. w; l: Q) z, Y9 x& T3 y
* CPU 的配置包括:SMM,Microcode updates, Processor-specific initialization,
: ~; B. ], E F* p' z, {, |8 X% LProcessor chache setting.
4: Framework Boot Script:/ H9 J7 y2 R* x0 U+ z
Framework boot script 是一个script 用来描述一些常用的初始化平台操作。如I/O,5 p! \0 U+ D* x& j4 P, u
memory, PCI 和SMBus。
, {8 N2 r& y5 X7 {可能有多个boot script tables 在某些平台,这些table 描述了如何成功让平台进入
5 q" j% Y+ Y' ^( s9 r/ d3 fPreboot 状态。( B. w9 e z3 Z Y, u, d& f7 b2 @
5:S3 返回PPI 和DXE IPL PPI! A8 `5 H7 R8 m! r& Z7 T
DXE IPL PPI 是最后一个被执行的PPI 在PEI 阶段,将提供正确的启动路径给
9 g) i( \7 ? W- K( X3 ]% {4 ?Framework。因此,DXE IPL PPI 将初始化CPU 和Preboot 平台,最后跳到OS 的( ]& n/ N2 C+ R4 I5 j+ G. b
呼醒向量处。在正常启动时DXE 是不会执行他的。
# z' Y& K# V/ u在S3 返回时,DXE IPL PPI 将会定位S3 Resume PPI.如果被找到,DXE IPL PPI 将会把
/ R& I/ c) |2 u+ p! Y8 y控制权交给S3 Resume PPI. S3 Resume PPI 将会执行一此配置让平台进入Preboot
7 r9 G6 ?) A/ @1 _state.
; Z) G( b+ c- O0 R3 ]% lS3 Resume PPI 必须执行Framework boot Script table 来加载平台配置。它负责找到OS/ H7 V5 r a8 E# n& p, w" s3 Q
waking vector 并且将控制权交给OS 来完成S3 返回。
$ Q! X4 w; u, m! l4 b+ @& b9 I在整个过程中,只有内存是S3 启动可以使用的。任何内存使用会扰乱系统的context(国! |% g) u" K) m) q8 p
入喜欢叫他为 上下文 ),使S3 失败。, n' |3 K/ R- H) ?8 w
S3 Resume PPI 需要知道如下情况:( G& i( Z$ r$ o4 G/ i
* 内存S3 boot Script Table 的地址或者firmware volume file 中S3 boot script table. _2 d% T* w* ^& e/ C
的地址。$ q& ?1 t( ]% A7 J& s- W+ w+ `
* RSDT 指针中ACPI 开始的地址和OS 的waking vector
# B& F! m5 v: l! ?" d* 保留一段内存给S3 返回时使用。 , G" n- t& E5 P1 ^
|
|