UEFI Framework - 10 [ Information Passing]


  1. Variables

    :一個非揮發性的容器,用來存放System Data並當作溝通的橋梁
  2. Hand-Off Blocks (HOB)

    :PEI 轉換到DXE時最主要的導管
  3. The data hub

    :主要的容器負責幫external consumption 累積data再送出去
  4. The Human Interface Infrastructure(HII)

    :被user跟ohter集中控制Module的configuration

Similarities and Differences

  1. 都是Data的導管
  2. 無論是Producers 和Consumers都有已經定義完整的Set
  3. 它們負責將Module間的Binding鬆開(Memory Initialization PEIM 透過HOB傳Data給DXE)
  4. 它們負責將鬆開Producer跟Standards間的Binding,Consumer需要Follow( Memory Initialization PEIM 能被任一個System Management Standard使用,Memory PEIM不需要知道最終的Consumer是IPMI or SMBIOS 或是任何的Interface)
  5. 它們運行時不需要任何Base on Architecture Protocols的Services
  6. 它們都是Position-Independent

Variables

能將Data 從EFI 傳到OS,跟其它幾個機制不同,在呼叫ExitBootServices之前或之後都會一直存在。它的Key是由GUID + Unicode String 組成。

  1. Variable Volatility:可以參考 http://william30101.blogspot.tw/2012/05/uefi-framework-5-efi-console-services.html
    1. Nonvolatile:在重開機後還是會存在
    2. Volatile:重開機後就會消失
  2. Size Concerns:因為大部份的Variable都是NonVolatile的,所以會佔空間,EFI SPEC沒有定義Variables的space size,所以遇到size不夠的問題時,通常會將多的Variable放在option ROM

HOB

本身是一個Binary Data Structure能將在PEI得到的訊息包好傳到DXE中,也是唯一從PEI傳給DXE的Information。
在這個章節中有提到這個Structure

  1. Keeping PHIT(Phase HandOff Information Table):所有HOB共同的Header,除了PHIT之外,HOB間不會有其它HOB的Pointer。PHIT裡面有存放HOB可放置的最大空間及現在HOB List目前的大小等等。
  2. Using HOBs:有兩個溝通的type
    1. PEI 的Producer跟DXE的Consumer之間,這個是最為常見的。
    2. PEI的Producer跟PEI的Consumer之間。
  3. HOBs in DXE:DXE Loader會使用HOB去塡滿Initia GCD table和PHIT Table。



The Human Interface Infrastructure(HII)


Framwork將要support的configuration分成以下四個部份

  1. Keyboards:跟在OS下一樣的功能
  2. Fonts:不像BIOS,EFI Video Interface本身不會有任何產生characters的機制
  3. Strings:一些為String在地化的function已經是大家都知道的
  4. 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


The Data Hub


它是一個機制,用來記錄Driver Create 出的 data,這個Data描述了誰產生某個Interface給Consumer,Data Hub存在於DXE而且在每次boot時都會重新create,在呼叫完ExitBootService會消失。可以利用data hub裡的protocol能記錄許多error log(也可以記錄許多的Event log),再存入Database。SmBIOS就是Data Hub抓出來集合而成的class。



留言

張貼留言