admin管理员组

文章数量:1539005

2024年3月8日发(作者:)

Intel? Framework Architecture Specification·3 (Chapter3:Pre-EFI Initialization (PEI)

Phase)2007-05-26 15:253 Pre-EFI Initialization (PEI) Phase

3.1 Introduction

Pre-EFI Initialization (PEI) phase 提供了标准化的method来loading 和

invoking 特定的初始 configuration routines for the processor, chipset, and motherboard. PEI

phase的首要目的是初始化足够的系统来允许Driver Execution Environment (DXE) phase运作.

最基本的, PEI Phase要做到决定系统boot path;初始化并描述system RAM和firmware volume的最小值. Firmware volume包含了DXE Foundation 和 DXE Architectural Protocols.

3.1.1 Scope

PEI phase负责将系统初始化到足够提供一个稳定的基础给随后的phase, 还负责侦测和recovering from 出问题的firmware storage space.

2000年时代的PC刚开始执行时还是处于非常原始的状态, processor需要通过microcode做update, chipset需要做非常多的初始化动作, RAM需要sizing, location和其他初始化. PEI phase就负责初始化这些subsystem. 另外PEI还将提供一个简单的基础框架以供很容易的完成到DXE phase的转换. 换而言之, 它必须完成开始DXE所需要的最少的动作.

H/W有改变时, 这些动作也有所改变.

3.1.2 Rationale 基本原理

PEI的设计本质上是一个微型版本的DXE, 以用来处理很多相同的issue. 组成:

- A PEI Foundation

- One or more Pre-EFI Initialization Modules (PEIMs)

PEI Foundation的目的是为特殊的processor架构保留参数, 并支持来自各种processor, chipset,

platform vendor的add-in module.

PEI与DXE不同, 因为DXE理所当然的认为system RAM都存在并可用. PEI则需认定只用有限的temporary RAM存在, 并且当permanent system RAM初始化完后可以重分配temporary RAM以供他用. 就本身而言, PEI并不像DXE那样有丰富的feature

3.1.3 Overview

PEI phase由foundation code和特殊的driver(PEIM)组成. Foundation code负责按连续的顺序分配plug-in, 并提供基本的service. 而PEIM则类似与DXE driver通常与要初始化的component对应. 预订的惯例是由component vendor来提供PEIM.

PEI phase的实现比其他phase更依赖于processor 架构. 特别是, 当processor在其初始化或准初始化状态能提供的resource越多, PEI环境就会越充足.

3.2 Phase Prerequisites

下面的section描述了成功完成PEI phase所必须的条件.

3.2.1 Temporary RAM

PEI foundation需要SEC phase初始化一段有最低限度容量的scratch pad RAM.

这段RAM可被PEI phase用来做data store直到system memory被完全初始化. Scratch pad

RAM可以如同普通的system RAM一样访问, 比如通过FSB的memory cycle来读写. 在system memory被完全初始化后, 这段临时的RAM可重配置做他用. 一种典型的实现方式就是用processor的内部cache来做.

3.2.2 Boot Firmware Volume

Boot Firmware Volume (BFV) 包括了PEI Foundation 和 PEIM. 它必须出现在系统的memory address space, 并不能有前置F/W插入. 其包含了reset vector.

BFV的内容遵循EFI flash file system的格式. Platform-specific PEIM要通知PEI foundation其他firmware volume的location, 以方便其寻找.

3.2.3 Security Primitives

SEC phase会提供interface给PEI foundation做鉴定操作. 为了继续保持root of trust,

PEI foundation会用这个机制去鉴定各种PEIM.

3.3 Concepts

3.3.1 PEI Foundation

执行两个主要功能:

- Dispatching PEIMs

- Providing a set of common core services used by PEIMs

PEI Dispatcher 的工作是按照顺序方式传递控制权给PEIM. 而common core

services则是从头到尾的按照PEI Services Table提供服务.这些服务做的事情如下:

1. 协助PEIM-to-PEIM communication.

2. 简要的管理temporary RAM.

3. 提供通用functions来帮助PEIM做到:

- 在FFS中寻找其他file

- 报告status code

- 为Framework的下一个phase准备handoff state

SEC phase完成后, SEC会调入PEI Foundation并提供以下参数给PEI:

- BFV的location和size, 以让PEI Foundation知道去哪里寻找PEIM的初始化套路.

- PEI phase可用的最小数量 temporary RAM

- 鉴定service callback以让PEI Foundation验证PEIM

PEI Foundation协助PEIM彼此沟通. PEI Foundation会maintain一个包含了PEIM注册接口的database. 这些interface称为PEIM-to-PEIM Interface (PPI).

PEI Dispatcher由single phase组成. PEI Foundation会检查每个包含了PEIM类型file的 firmware volume. 它会检查每个firmware file里的dependency expression (depex) 来决定是否一个PEIM可以被执行.

3.3.2 Pre-EFI Initialization Modules (PEIMs)

PEIM是一些可执行的二进制码, 封装了processor, chipset, device或platform-specific 功能. PEIM提供了interface,其他PEIM或者PEI Foundation可通过interface与PEIM或者H/W沟通以得知其PEIM概要. PEIM各自独立的built成二进制模块, 不压缩的放在ROM里. 出于performance考虑, 有一小部分PEIM存在并运行于RAM里. 这些PEIM是以压缩方式放在ROM里的.

3.3.3 PEI Services

PEI Foundation会建立一张PEI Service Table以供所有系统PEIM访问. 由于在build time 时,PEI Foundation的location和temporary RAM是未知的, 所以一个PEI Service

Table的Pointer会传给每个PEIM的entry point和部分的PPI. PEI Foundation 提供了一下几种service:

PPI Services: 管理PPI以让PEIM之间的内部模块调用更容易. Interface装载和后续使用都在temporary RAM的database中.

Boot Mode Services: 管理系统的boot mode (S3, S5, 普通boot, 诊断模式等)

HOB Services: 创建称为Hand-Off Blocks(HOBs)的数据结构, 被用来传递信息给下一个phase.

Firmware Volume Services: 根据firmware volume中的FFS来寻找PEIM和其他flash device中的firmware file.

PEI Memory Services: 在memory还没建立以前为memory management service收集信息.

Status Code Services: Common progress and error code reporting services, 如:

Port80或 serial port简单的text输出以供debug.

Reset Services: 提供一个restart系统的通用方式.

3.3.4 PEIM-to-PEIM Interfaces (PPIs)

PEIM通过PEIM-to-PEIM Interfaces (PPIs)调用其他PEIM. Interface用Globally

Unique Identifiers (GUIDs) 来命名, 以避免独立开发的模块与已定义的接口冲突. GUID是一个128bit的值, 用来区分boot service环境中的service和structure.

PPI 被定义成包含了功能和数据的一个structure. PEIM必须在PEI Foundation中注册他们的PPI. 一个PEIM想要使用一个特殊的PPI就可以像PEI Foundation询问以找到它需要的Interface. PPI有两种类型: Services, Notifications

PPI的service能够让一个PEIM提供功能和数据给另一个PEIM使用. PPI notifications 允许PEIM收回注册, 当另一个PPI在PEI Foundation中注册时.

3.3.5 Simple Heap

PEI Foundation用temporary RAM来提供一个简单的heap store. PEIM可以要求从heap中获得一些配置, 但没有机制来free heap中的memory. 一旦permanent memory 可用, heap将被重安置在系统内存中, 但PEI Foundation将不会安置已存在的heap中的data. 因此, PEIM不可以储存pointer在heap中.

3.3.6 Hand-Off Blocks (HOBs)

Hand-Off Blocks (HOBs) 是用来从PEI phase传送system state information 到DXE phase的机制. 一个HOB仅仅是个在memory 里的data structure, 包含了header和data.

Header被定义为所有HOB都公用, 任何code通过header可以知道: data section的格式; HOB的total size.

在permanent memory可用以后, HOB连续分布在PEIM可用的memory里. HOB的顺序列表被称为the HOB list. HOB list里的第一个HOB必须是Phase Handoff Information Table (PHIT)

HOB, 它描述了PEI phase使用的物理内存和PEI phase阶段发现的boot方式.

只有PEI组件可以增加或者修改HOB. 一但HOB list传递给了DXE, 就变成对DXE组件Read-Only了. HOB list 只包含PEI-to-DXE时传递的system state date, 而不反映当前DXE的system state. DXE 组件应该用DEX定义的service来获得当前系统的state 来取代HOB list.

做为指导方针, 希望的模式是, PEIM产生一个HOB在PEI阶段, 一个DXE

driver将会消化这个HOB, 并把其中的信息传给其他需要的DXE组件. 传递的方法应该遵循DXE架构下的机制.

SEC phase会提供interface给PEI foundation做鉴定操作. 为了继续保持root

of trust, PEI foundation会用这个机制去鉴定各种PEIM.

3.4 Operation

PEI phase的操作包括: 调入PE Foundation, 顺序分配所有PEIM, 侦测并调入下一个phase. 在PEI Foundation初始化期间, PEI Foundation初始化内部的data区域和功能, 以提供common PEI service给PEIM. 在PEIM 分配时, PEI Dispatcher扫过firmware volume, 并根据plash file系统的定义侦测PEIM. 当PEIM符合如下条件, PEI Dispatcher就把他们分配出去:

- 该PEIM还没被调入

- 该PEIM file是正确的格式

- 该PEIM可信赖

- 该PEIM的附属需求已经满足

在分配PEIM之后, PEI Dispatcher会继续扫过firmware volume 直到所有侦测到的PEIM都

被调入或由于需求列表不符合任何PEIM而导致没有PEIM可以被调入为止. 一旦该条件达到了, PEI Dispatcher的工作就完成并调入DXE Initial Program Load (IPL) PPI来开始下一个Phase

3.4.1 Dependency Expressions

对PEIM的顺序排列是通过对每个PEIM相应的dependency expression的鉴定来决定的.

Boolean expression描述了PEIM要运行所必要的需求. 这些需求会产生一个大概的顺序, 在这个大概顺序的内部, PEIM可以按照任意顺序初始化. Dependency expression 会提到PPI的GUID和file name的GUID.

3.4.2 Verification / Authentication

PEI Foundation没有关于security方面的state, 因此, 安全判定被assign 给platform-specific 组件. Security PPI和Verification PPI.

Verification PPI目的是检查给出的PEIM的authentication status. 方法包括digital

signature verification, a simple checksum, or some other OEM-specific mechanism. 检验结果将返回给PEI Foundation, 它将把这结果送给Security PPI. Security PPI将决定PEIM执行与否.

3.4.3 PEIM Execution

PEIM在被PEI Foundation调入后就执行完成. 每个PEIM被调入一次, 并必须在此期间完成其工作, 还要install其他PPI来允许其他PEIM需要时call它.当一个PEIM在另一个PEIM开始run以后再想取得控制权,可以注册一个回收通告notification callback.

3.4.4 Memory Discovery

Memory Discovery是PEI phase的重要event. 当一个PEIM成功的发现, 初始化,和测试一片连续的system RAM后, 它会把这片RAM报告给PEI Foundation. 当这个PEIM退出时, PEI Foundation会把PEI对temporary RAM的使用搬迁到real system RAM中, 这包括2个任务:

- PEI Foundation必须转换PEI stack usage, 从temporary RAM 到 permanent system memory.

- PEI Foundation必须迁移PEIM分配的simple heap(包括HOB)到real system RAM.

这个过程一旦结束, PEI Foundation就装载architectural PPI来通知相关的PEIM real system

memory可以用了.该通告允许在memory能用以前就运行完了的PEIM收回, 这样他们就可以完成必须的工作: 比如在real system memory中建立HOB给下一个phase DXE 使用.

3.4.5 Intel Itanium Processor MP Considerations

介绍了在Itanium处理器系统中的特殊注意点.

3.4.6 Recovery

Recovery是恢复被损坏的system’s firmware devices的过程. 大多数在非挥发型存储装置中的firmware volume都是以block方式管理的.当在update时掉电或者存在有问题的硬件都可能导致损坏.

一个PEIM或者PEI Foundation本身是可以发现是否需要做recovery. PEIM可以检查”强行recovery” jumper. PEI Foundation可能发现特殊的PEIM不可用或者整个firmware

volume都损坏了.

Recovery背后的思想就是, 保留一块足够大的system firmware, 这样系统可以boot到一点, 并在该点能读出一份lose的数据的副本, 然后reprogram firmware volume.

保护一块Recovery firmware是firmware volume存储管理的功能之一. 在EFI flash file系统里, recovery需要的PEIM会标记. 标记过的item会被firmware volume store保留.

当出现PEIM被损坏的情况, boot mode就应该转换成”recovery”, 一旦设成recovery,

其他PEIM就不能再转换到其他状态. 在PEI Dispatcher发现系统处于recovery mode之后,

将会restart自身, 然后只dispatch那些recovery需要的PEIM. 当PEIM检测到严重问题或者forced-recovery也通知PEI Dispatcher需要做recovery dispatch.当PEIM在recovery media中找到recovery firmware, 并且DXE Foundation从这个firmware volume中启动时Recovery

dispatch就完成了.DXE firmware volume中的driver可以执行recovery.

3.4.7 S3 Resume

S3 resume和normal boot在以下几个方面有不同:

- memory subsection会restore原来睡下去之前的state而不是再初始化

- OS拥有的system memory PEI Foundation和PEIM都不能使用了

- resume时DXE phase不再分配, 因为会损坏memory

- 通常PEIM不在dispatch DXE phase, 做为替代,会用一个特殊的Hardware Save Table来restore基本的H/W回到boot配置. 在restore完H/W后, PEIM会把控制交给OS-supplied

resume vector.

- DXE和其后的phase会为save足够的信息在framework reserved memory里或者firmware

volume里, OS 可以用这些信息来restore device. 这些信息就放在Hardware Save Table.

掌握这些你就会赚钱

楼主 四川网友 2009年11月9日 5:18 点击

1885 回复 31

掌握好了均线理论就足够赚的盆满钵溢了;

其实,一年只买卖一支股票就够了;

其实,如果你的资金在100万以下,一年翻番并不难;

其实,每日亲手画手中个股的K线图才会让你的思维波动和主力一致;

其实,真的不要太,因为股市里的钱是赚不完的;

其实,真的不要太怕,因为是不会让股市崩盘的;

其实,主力也很难,他们都很怕出不了货;

其实,底部放量突破就应该关注了,不管是真是假;

其实,也许再坚持一会儿,洗盘就结束了;

其实,中线心态,满仓一支股,手里留点,逢高出点,逢低接点,滚动操作是上策;

其实,看头才是最需要锤炼的功力;

其实,做短线最主要的是看成交量和换手率;

其实,每日的量比榜和成交金额榜就是短线的黑马榜;

其实,买入正在上涨的股票才是最安全的;

其实,看到长期横盘后底部带量向上突破的缺口,就说明你的财运来了,即使这个缺口只有一分钱价差;

其实,最管用的是技术指标的背离,而不是这个指标当前的数值;

其实,把大盘和个股的K线图叠加起来,就可以判断该股有无主力,主力强弱;

其实,敢于适时斩仓才是在这个场子里生存的根本;

其实,无论什么方法,你只要掌握了一种,就足够了;

其实,分时走势中,白线和黄线距离突然垂直向上拉大很多,就是短线出货的绝好机会,因为你一定有机会再补回来;

其实,洗盘和出货最重要区别就在于一个量缩一个量增;

其实,短线一定要看15分钟的K线图,根据KDJ可找到当日的进出点,根据OBV可判断主力的意图;

其实,如果你真的要做长线,就把K线图设置成30、60、120日;

其实,如果你有足够的技巧和胆量,大盘放量上攻时,你完全可以追龙头股的第一个涨停,说不定一周就能赢利50%;

其实,强势上攻的股,出风险提示公告可理解为“开盘就追吧,至少还有3天的涨头呢!”;

其实,短线可在ST摘帽的那天介入,你要坚信丑小鸭已变成了白天鹅,怎么着也得扑腾几下;

其实,新股上市的第一天,开盘30分钟的换手率达到40以上,就已经说明了问题;

其实,真正高手往往不会在股票明显进入下降通道的时候出货,而是更早;

其实,在股市里,会休息的人才会工作,为了自己的钱袋而工作;

其实,如果你能做到“有风驶到尽,无风潜海底”,那你就会发现,其实,做股票是很轻松的!

其实,炒股真的不难!

其实,最简单就是最实用!看完贴你是要顶的啊

本文标签: 系统需要提供方式工作