热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

02_基本的UEFI架構

转自:http:blog.yam.comwttmamaarticle33757450在EFI中,有一些基本的觀念必須先建立先知道一些觀念、結構,有助於後續的理解。幾個EFI的重要角色要記

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

在 EFI 中,有一些基本的觀念必須先建立
先知道一些觀念、結構,有助於後續的理解。


幾個EFI的重要角色要記得

1. System Table : 含有很多重要的資料結構以及系統 function 的 interface。
2. Handle Database and protocols : 很多資源及概念的 reference ,是被註冊在此處。
3. EFI Image : 在 driver 還沒 dispatch 前,都是屬於 image 的存在。是一種 PE/COFF的格式。存在ROM中
4. Event : 在 EFI 中,含有許多 Events 可供使用
5. Device Paths : 在 EFI 中,對於 Device 的表示,都是使用 Device Path 來進行表示。

以下來分別解說這些重要角色

1. System Table 

它是一個 DXE 時建立的 Table 。它內含幾個重要的東西
  a. Boot Services
  b. Runtime Services
  c. Protocols Services

這些東西都可以從 System Table 找到相關 reference 。
最簡單的分類方式是
Boot Service 是在 未進入 OS前( 還沒call ExitBootSerivce)前可使用的。之後就不能用了
Runtime Service 則在 進入 OS 後還可以使用的。
Protocols Service 則是給 Driver 使用的,可以註冊 Handle , Routine …等等

2. Handle Database and protocols
當 Dxe Driver 利用 Protocol Service 註冊想開放的功能,它是以 Handle 的方式來儲存。
此 Database 是儲存的媒介。取得也是利用 Protocols Service 來查詢。
因為是查詢,使用方必須知道相關的 data structure 才能正確的使用開放的 Handle( 轉型 )
而內部主鍵則是利用 GUID 來分別各 Handle (GUID很難重覆)
Handle 是由 一個或多個 Protocol 組成的( 因為Protocol是掛在Handle上的)
Protocol 本身則以 GUID 為身份代表,開放一些 Interface 。

3. EFI Image
含有 PE/COFF Format 的 Header 。目前有以下類型的 EFI Image
  a. EFI Application : resource 在退出 app 時 release
  b. EFI Boot Service Driver : resource 在 ExitBootServices後release
  c. EFI Runtime Driver : resource 會一直存在
這也代表,使用這些格式的 Image 就可以被 EFI 所使用,而不依賴處理器。( 多了一層在處理這東東)

4. Events
Event 是 EFI 所管理的。使用者可以使用它來組合自己想做的事。
以下是 Event 的分類
 a. Wait Event
 b. Signal Event
 c. ExitBootServices Event
 d. Timer Event
 e. Periodic Timer Event
 f. one-shot timer Event

在概念上,它都必須建立一個 Event 再由 丟到 Event Service 去做你需要的安排。

OK,以上是純文字說明,接下來補一些圖片幫助理解
1. System Table
這個東西,重要的是它的存在,以及什麼東西可以透過它找到。
以下是它的結構

藍色那塊就是 Boot Services
暗紅那塊就是 Runtime Services
以及其它可供擴充的 Configuration Table ( 忘了它沒關係…有用到再說 )

2. Handle Database  and Protocols
這東西,想像成一種小管理系統。
它長的像下圖

一個 Handle 跟著一個 Handle
而每個 Handle 由一個或多個 Protocol 組成
而 Protocol 是由 GUID 所代表。
那 Protocol 又是啥東東?
看下圖


其實就是 會參考到 某 Driver 願意分享出來的 function 。
它是一組 reference 。如果你有OO的概念的話,那應該更會有這個FU。

而 Handle 本身,還是有分類的。
所有存在 ROM 裡面的 Image file, 在載入後,都會變成一個 Image Handle
而 Driver 被 dispatch 後,則是看它本身的內容看要不要再產生新的 Handle 
目前已知的是
 a. Driver Handle ( 符合 EFI Driver Model )
 b. Service Routine ( 這個產生出的 Handle 沒啥意義,重要的是它要分享 Service )


4.  Image 
Image 本身指的是符合 PE/COFF 格式的 Image file
Image 依它自己的目的,是可以有以下幾個分類的。

這邊要說明一下
Handle 是 EFI Framwork 自行建立的 Reference ,是動態建立的。
而 Image 則是本身就存在 ROM 或是其它 Storage 中。可以透過 LoadImage 讀出來
透過 Dispatch 執行該 Image。
下圖的分類,指的是該 Image 本身的意義所造成的分類。

5. Events
這邊要補充的是, Wait Event , Signal Event 是基本型態
其它 Event 就是如圖上看到的,是其它 Event 的延申。

ok
說完了。
這邊主要參考的是 Beyond BIOS 的內容,抽我覺得要說的打的。

這裡的重點在於,EFI 基本上有啥,點出來,在應用的時候,你的概念可以連起來
就這樣子而已,很多東西還是必須實作才有 FU,不然,這些概念就夠了。
推荐阅读
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 假设你有一个数组:intarray[SIZE];或者int*array=new(int[ ... [详细]
  • Ajax智能匹配检索(含图含完整代码)
    使用谷歌搜索引擎的用户都知道,只要在文本框中输入部分关键字,就能显示相关搜索提示信息列表。如图:   本技术的核心是通过ASP.NETAjaxControlToolkit中的Aut ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Bro是一款强大的网络安全工具,以及协议识别与统计的工具。Broisapowerfulnetworkanalysisframeworkthatismuchdifferentfro ... [详细]
  • **步骤1:在DNS服务器的基础上,修改DNS的正向数据库文件varnamedchrootvarnamedtext.com.zone,添加MX资源记录。具体操作如下。** ... [详细]
  • SQL Server是什么
    本篇内容主要讲解“SQLServer是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQLServe ... [详细]
  • 伟大的职位,总是不经意之间就出来了,要找好多人呀~~~~~WirelessLightRadioApplicationSoftwareEngineerLocat ... [详细]
author-avatar
混事珊远_692
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有