DXE Overview
- DXE Overview
Driver Execution Enviroment (DXE)是 PI SPEC.裡的第二個phase,在這個phase中有許多的東西被啟動或初始化。同時,EFI services、protocols及driver都在這個時候被implement或support。DXE也建立了許多system table。
- Importance of DXE
Without DXE
- 每個人的coding style 不同,同時,每家code base也可能不一樣。因此,BIOS的feature的實作方式也會因為vendor不同而有所差異,這造成了移植的困難。
- 一個單一的source file控制整個啟動流程,造成開發新的feature或更改上的困難。
With DXE
- DXE參考OS的做法,driver及library都定義得很清楚,因此也很容易實作模組化的 driver。
- DXE Foundation's Function
DXE Foundation是DXE Phase的核心,他有許多的functions可以使用。下面分成四個部分來介紹DXE Foundation。
- Initialize Platform
DXE Foundation initial Chipset及platform。 其中一個function會load driver來建構環境,最後boot manager 及OS
- Dispatch DXE
DXE foundation會先dispatch DXE driver,他會處理相關的相依問題。
- Dispatch UEFI
在dispatch DXE driver後,DXE foundation會去dispatch UEFI driver,而UEFI driver是沒有相依問題的。
- Load Boot Manager
每一個driver在entry point的地方都必須註冊與那些protocol相依,因此Load Boot Manager可以依此做initial 的排序。最後會將control交給下一個phase - BDS。
- DXE Foundation Properties
DXE Foundation有許多的特性,以下一一介紹。
- HOB List Dependent
上一個phase PEI會將所有的hardware, reosurce的 state放到HOB傳給DXE,因此,DXE無須知道hard-coded address
- No Hardware Specifics
DXE drivers必須透過Architecture Protocols(APs)來與硬體溝通。因此不可以假定現在使用的是哪個硬體然後去使用它特定的東西,例如address。
- No Hard-Code Address
因為沒有hard-coded的address,在system memory任何地方都可以load DXE foundation。
- DXE Components
DXE 同樣有許多的component,以下一一介紹。
- Drivers
負責初始化Processor、Chipset及Platform。而DXE Driver 更是負責建構APs。
- Foundation
負責Dispatch drivers、建立Boot services、Runtime Services及DXE Services。
- Architectural Protocols(APs)
因為沒有hard-coded的address,在system memory任何地方都可以load DXE foundation。
- EFI System Table
EFI system table存放了指標指向包含了UEFI Service tables、 Configuration tables、 Handle databases及console devices
- Dispatcher
DXE Dispatcher會依照相依以正確的順序啟動 driver。
- DXE Phase Flow
DXE的執行階段可以分成幾個步驟:
- DXE Foundation Initial Services,包含UEFI Service及DXE Service。
- DXE Foundation Dispatch DXE drivers。
- DXE Dispatcher 搜尋FV裡面是否有priori file,依照順序將driver load到memory。
- 接著尋找FV裡剩下的Driver並Load進memory。
Data Structures and Events
- Data Structures
- Events
因為Event是與CPU architecture不相關的,因此UEFI使用event來作為object、protocol之間的訊號。 解釋下圖,主要可以分成Singnal events及wait events。
- Exit Boot Service Events
是當呼叫ExitBootService()的時候從wait event轉回signaled state。
- Set Virtual Address Map Events
- Periodic Timer Events
- One Shot Timer Events
- Wait Event
- EFI System Table
DXE Foundation
- DXE Foundation Code Flow
DXE Foundation有兩個attributes: Single Threaded Environment and One Interrupt
- Single Threaded Environment
a. 在DXE Foundation的code只會有Boot Strap Processor(BSP)會執行。 b. 其他的application processor都進入 wait mode。
- One Interrupt
a. DXE foundation只使用timer tick作為software的interrupt。 b. 因為只使用timer iterrupt,因此所有的devices都會被pulled c. DXE foundation 會使用event取代multiple interrupts。
- DXE Main
- DXE Main Source Code
Architecture Protocols
- APs Defined
DXE藉由DXE Drivers 會產生 Architectural Protocols(APs)抽象化硬體的溝通,以下以三個部份來介紹。
- Function
可以把AP's 想像成脫離platform-specific hardware的wrapper function。舉例來說,CPU AP 管理interrupt、取得processor info、取得processor-based的timer。
- Support
AP's 是low-level的protocols用來支援啟動以及runtime services。我們可以利用higher-level的platform function來使用AP's提供的功能。
- Dependency
有些AP可能會與其他的AP相依,舉例來說,whatchdog 需要IO及timer的access。有三種方式可以解決相依的問題:a. 利用Dependency Grammar來load DXE b. 使用RegistryProtocolNotify()來通知AP被load進去了。 c. 使用Priorl List將預先知道的AP 依照相依順序排好讓dispatcher按照這個順序dispatch。
- APs' Role
,藍色的在os runtime會被free掉,灰色則可以繼續使用
- APs' Location
DXE Dispatcher
- DXE Dispatcher
DXE Dispatcher 負責load和dispatch FV(Firmware Volume)裡的 DXE及UEFI driver。 DXE Dispatcher主要有幾個目標如下:
- Driver可能是由不同的組織、部門所撰寫。因此Dispatcher必須能處理DXE Driver 之間的dispatch 順序
- DXE Dispatcher支援例如emergency patches。另外,DXE Dispatcher也讓開發人員更容易整合自己開發的driver。
- DXE Dispatcher Source Code
- DXE Dispatcher State Machine
- DXE State Machine Example
DXE Drivers
- DXE Driver Type
DXE drivers包含了device或service code執行在UEFI driver之前。如同之前所提到的,DXE 階段的driver分成兩種,即DXE Driver和UEFI Driver。下表比較了兩個的不同。
- BDS Driver
在DXE階段最後一個driver是BDS( Boot Device Selection) Driver。BDS driver負責建立console( keyboard, video)及執行UEFI Boot Option。 下圖是啟動BDS的示意圖。額外說明的是,因為當Dispatcher load BDS的時候,會先進去她的entry point讀取相依的APs,因此假設仍有未完成的APs則可能回到DXE Dispatcher去load其他的driver。
SMMSystem Management Mode(SMM)他是CPU的一個模式,當我們觸發CPU的SMI Pin的時候就會進入SMM Mode。
SMM模式下的執行的程序被稱作SMM處理程序,所有的SMM處理程序只能在稱作系統管理內存(System Management RAM,SMRAM)的空間內運行。
- SMM Service
SMM service是高優先權的system management interrupt(SMI),在runtime的時候仍然可以接管系統。下面分成三個特性及兩個service特點來介紹。 Characteristics
- 在SMI的時候,CPU執行pre-defined starting vector。
- SMM的code放在SMRAM中,在SMM初始化後會lock起來。
- SMI是由hardware event或 system interrupt所產生的。它可以被偵測、清除或disable。
Services
- SMM service是一個handlers的list。並且都是DXE foundation service的subset。
- SMM services和DXE foundation services提供同樣的functionality但不同的是SMM locate在SMRAM中。
- SMI是由hardware event或 system interrupt所產生的。它可以被偵測、清除或disable。