Variables
:一個非揮發性的容器,用來存放System Data並當作溝通的橋梁Hand-Off Blocks (HOB)
:PEI 轉換到DXE時最主要的導管The data hub
:主要的容器負責幫external consumption 累積data再送出去The Human Interface Infrastructure(HII)
:被user跟ohter集中控制Module的configuration
Similarities and Differences
- 都是Data的導管
- 無論是Producers 和Consumers都有已經定義完整的Set
- 它們負責將Module間的Binding鬆開(Memory Initialization PEIM 透過HOB傳Data給DXE)
- 它們負責將鬆開Producer跟Standards間的Binding,Consumer需要Follow( Memory Initialization PEIM 能被任一個System Management Standard使用,Memory PEIM不需要知道最終的Consumer是IPMI or SMBIOS 或是任何的Interface)
- 它們運行時不需要任何Base on Architecture Protocols的Services
- 它們都是Position-Independent
Variables
能將Data 從EFI 傳到OS,跟其它幾個機制不同,在呼叫ExitBootServices之前或之後都會一直存在。它的Key是由GUID + Unicode String 組成。
- Variable Volatility:可以參考 http://william30101.blogspot.tw/2012/05/uefi-framework-5-efi-console-services.html
- Nonvolatile:在重開機後還是會存在
- Volatile:重開機後就會消失
- Size Concerns:因為大部份的Variable都是NonVolatile的,所以會佔空間,EFI SPEC沒有定義Variables的space size,所以遇到size不夠的問題時,通常會將多的Variable放在option ROM
HOB
本身是一個Binary Data Structure能將在PEI得到的訊息包好傳到DXE中,也是唯一從PEI傳給DXE的Information。
在這個章節中有提到這個Structure
- Keeping PHIT(Phase HandOff Information Table):所有HOB共同的Header,除了PHIT之外,HOB間不會有其它HOB的Pointer。PHIT裡面有存放HOB可放置的最大空間及現在HOB List目前的大小等等。
- Using HOBs:有兩個溝通的type
- PEI 的Producer跟DXE的Consumer之間,這個是最為常見的。
- PEI的Producer跟PEI的Consumer之間。
- HOBs in DXE:DXE Loader會使用HOB去塡滿Initia GCD table和PHIT Table。
The Human Interface Infrastructure(HII)
- Keyboards:跟在OS下一樣的功能
- Fonts:不像BIOS,EFI Video Interface本身不會有任何產生characters的機制
- Strings:一些為String在地化的function已經是大家都知道的
- Forms:為了塡HTML和XML格式,markup Language變得非常相似
當開機後Driver會去Load Variables去Initial Hardware,另外也會提供Data Package給HII Database。當Setup開始Run後,會去Load Database裡面的資料,之後可以開啟Browser做一些Data的傳輸(目前理解是這樣…)
下面的圖是透過LAN Driver讓Remote pre-boot APP能夠從HII Database Get 及Send Data
flamopdia_bu-1993 Antonio Rodriguez https://wakelet.com/wake/gh1YGr7jBmlZlpenBZxSf
回覆刪除gnuttanecheal