System Management Mode SMM模式學習分享


對於系統來說類似於實模式、保護模式。

這種模式面向系統固件。

他提供了一個比較清楚,容易孤立的環境。

Spec中形容該模式的特性時用的詞是“透明”,在后面的學習中應該可以了解其含義。

 

SMM模式通過調用SMI進入,進入之后,SMI就會disable,不過系統會暫存一個且只有一個SMI,當SMM模式退出時,檢測到這個SMI會再次進入SMM模式。

進入SMM模式后,系統切換到SMRAM這個獨立的環境中。

RSM會使得系統離開SMM模式,RSM只有在SMM中才可以執行。

 

System Management System Table

該表提供了SMST的基本service,可以調用SMM Service。SMM Service可以作為driver執行SMM的內容。SMST的地址可有EFI_SMM_BASE_PROTOCOL.GetSmstLocation()確定。

SMST是SMM的基礎部分它管理着以下功能:

1,  SMM階段中driver的dispatch

2,  SMRAM的分配

3,  改變進程的系統管理模式

 

SMM Services

SMM Services分為兩種類型,

·SMM Services

·SMM Library (SMLib) Services

 

SMM Protocols分為兩種:

·SMM Base Protocol

·SMM Access Protocol

 

SMI系統管理中斷

 

SMI的運作獨立於處理器的其他中斷處理。

SMI的優先級高於NMI和可屏蔽中斷。

 

SMI HANDLER執行環境

 

在保存好當前處理器的狀態后,處理器會初始化一些核心的寄存器如以下值。

 

 

進入SMM的過程中。控制PE和PG位的寄存器CR0將會被清除,處理器會進入一個類似是模式的環境。不同之處在於以下幾點:

1,  SMRAM可以尋址4G的空間

2,  正常的64k實模式段界限提高到4Gbytes。

3,  默認的操作數和地址大小為16位

4,  數據和堆棧可以放在4GByte的地址空間的任何地方。

 

Trace Code了解SMM的初始化

SMM環境初始化

InitAmiLib()//全局變量的一些初始化,BootServices,RuntimeServices

LocateProtocols()//設置SMM需要用到的protocol

    |--> SMM Base Protocol

|--> SMM Access Protocol

//(如果檢測到從CSM進入的話,會設置Lagecy BIOS protocol)

FindHobs()//找到需要的hob

|-->CPU hob

|-->SMM hob

|-->CPU info hob

InitgBasePrivate()

InitgDispatcherPrivate()

|-->Allocate a XMM Save Restore on a 16-byte boundary

|-->Initialize SmmCpuInfo

|-->Initialize AP control for multi-threaded SMM.

//如果SMM_CACHE_SUPPORT == 1

InitSmmCacheData()

//鎖住SMM模式使之不被改變

gSmmAccess->Lock(gSmmAccess

#if SMM_USE_PI == 0, 0

#endif

);

//進入離開SMM模式需要在加載option ROM之前,callback可以使SMM driver disable以做到這一點。同樣進入OS之前也應該disable SMM call back

Status = RegisterProtocolCallback()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM