03_PEI_Phase

news/2024/7/5 23:56:14 标签: module, header, cache, service, access, 算法

转自:http://blog.yam.com/wttmama/article/33760946

PEI Phase 是我第一次追 EFI 的 code 。

第一次看其實霧傻傻的~


PEI Phase 在原版的 EDK 中,就已經存在的 code 
它可以當成是 EFI Framwork 的一部份。

下圖是是所有的 Phase ,應該很容易觀察到 PEI 是哪個。


由上圖可以知道,這裡要做的事如上圖
CPU Init
Chipset Init
Board Init
但實際上我不知道它在哪@@~ㄏㄏ。

有關 PEI 的內容,其實是有 spec 可以看的,可以去查 PI Sepc
PI Spec ( Platform Implemntation Spec )

PI Spec 中有一張圖,它把 PEI Phase 的大流程指了出來。
解釋一下專有名詞
PEIM : PEI Module
Entry Point : Module 被 Dispatch 時的進入點

這張圖的的意思解釋一下就很簡單了。
PEI Phase 必須準備一下它的 Foundation ( 想像成環境 )
所以必須做 Initialize 。
做好 Initialize 後,就可以進行 Dispatch 了。
Dispatch 的對象是啥?
就是 PEI Module 囉!

PEI Module Dispatch 完後,就會進入 DXEIPL 。
DXEIPL 是啥?就是剛剛 Dispatch PEIM 的其中一個。

而這個 Phase 最重要的,就是 Init Memory 。
也就是 PEIM 中有一個是 Memory 的 Module 。( 俗稱 MRC Init)
當 Memory 有  Init  後,內容會有一個技巧,會讓整個 PEI Phase 重做一次
做記憶體資料的搬移。

之後就會進入 DXE Phase 了。
( 當然,dxeipl 也負責 Crisis , S3 之類的動作,但不提 )

這邊的 code 很簡單,但有幾個點必須深入討論。

1. cache mode , memory mode 
PEI 在一開始是 cache mode  ,在 Memory Initalize ok後才會使用 Memory 。

2. HOB 的使用
Hand Off Block ,在 PEI 與 DXE Phase 中,會留下的資料只有一樣
就是 Hob 的 Data。
EFI 有提供 Foundation Service 讓 PEIM 可以 set Data 到 HOB 裡。
( 我忘了 Variable 能不能用… )

以下是 SPEC 挖出來的例圖,它理論上是這樣用的。
PHIT ...我忘了它是什麼的縮寫了,它是 HOB 這東東的開頭。
為什麼是開頭,因為它是一種結構的集合。
詳情請看 PI Spec。( 其實我個人很討厭這句話…因為就是因為看不懂才要找教學啊… )
多說一點好了
HOB 它是多個串起來的,它有分 Type 。
頭是 PHIT ,尾是 END_OF_HOB 。
中間就是上圖描述的東西了,每一個都有一種 Type。
但~真正的詳情,真的要看 SPEC 。以上。
m, 想到有一張圖,再補一下。這是另一種角度的 HOB 方塊圖,參考一下。


3. PEIM 哪來的?
PEIM 其實它存在 ROM 裡面,但,也是有格式的。
PEIM 它會存在 FV( Firmware Volume )中。
這又牽扯到另一本 spec 了,叫 Firmware Storage Spec
PEI 的 Foundation 會提供 Serivce 去 access 這些東西( 應該也有 hob )
看一下spec 提供的圖
由圖可知,它是一個一層包一層的結構
Firmware Volume 可以放很多 Firmware Files
而 Firmware Files 可以有很多 Sections
每一層都有一個 Header 。
程式就是負責讀懂 Header 就行了。
另一種圖長這樣
會意去吧~~它就是長這樣。
解析完,那它就是 PEIM 了。

4. Dispatch 演算法
這是 Option ,可看可不看,我個人是沒看,但懂大概的概念。
主要是如下
 a. 去 FV 找 PEIM ,有的話,就抓出來做 Dispatch
 b. 如果 該FV 沒 PEIM 那就就找下一個 PEIM( 因為別的 Volume 理論上是可以存在獨立的 PEIM 的 )
 c. 給 Dispatch 過的 PEIM 做個記錄,下次重找時就不要再 Dispatch 了。
 d. 處理 MRC Init 的事。


m…大概是這樣子,沒想到其它事了。
以上…
下次換介紹 DXE , ipl 主要是判斷 BootMode ,所以就不說了。

http://www.niftyadmin.cn/n/1516365.html

相关文章

Maven简介(六)——Dependency

尊重原创,原文链接 7 Dependency介绍 7.1 依赖的传递性 当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖于C,这样Maven在建立项目A的时候,会自动加载对C的依赖。 依赖传递对版本的选择 假设A依赖于B和C&…

04_PEI之InstallPpi演算法

转自:http://blog.yam.com/wttmama/article/33762035 m,這部份是第一個理解的東西 但,說真的,它對BIOS 真的沒幫助,只能幫你瞭解 PEI 的 IntallPpi 是怎麼做的而已。這個內容可以套用在InstallPpiLocatePpiNotifyPpi…

Maven简介(七)——整合Eclipse

尊重原创,原文链接 8 Maven整合Eclipse Maven整合Eclipse就是在Eclipse中安装Maven的插件,这样我们就可以直接在Eclipse上使用Maven,而不需要去命令窗口敲Maven命令了。有两个Maven插件我们可以用来整合Eclipse,实际应用中安…

05_DXE_Phase

转自: http://blog.yam.com/wttmama/article/33762726 這次要說的是 Dxe Phase 了。 這部份說真的,也花了我不少時間看。主要還是在於瞭解它的思路和架構。又要套用這張圖了。看看上圖的 DXE 在做啥…Intrinsic Service … ( 應該是 Dxe Foudation )再…

Python包管理工具

尊重原创,原文链接 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。 例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index&#xf…

python中collections模块_Python collections模块使用方法详解

一、collections模块1.函数namedtuple(1)作用:tuple类型,是一个可命名的tuple(2)格式:collections(列表名称,列表)(3)​返回值:一个含有列表的类(4)例子​:import collections# help(collections.namedtupl…

06_DXE_InstallProtocolInterface

转自:http://blog.yam.com/wttmama/article/33768917 這是一個本來看不懂的東東 後來去追了裡面的 code 。m,真的很特別,但~我要強調,它不能讓你瞭解BIOS 但可以讓你對 程式更有 sense 。要看懂 InstallProtocolInterface 這個 …

SVN图标不显示

一、完全不显示情况 (1)解决方案1 win r 启动 regedit 查找注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 图标仅可显示15层图标,按优先级先后叠层&…