天天看點

X86-1-ME研究

ME研究

在新的PCH中有三個這樣的核心元件:

管理引擎(ME)、

內建傳感器中心(Integrated Sensors Hub,ISH)

創新引擎(Innovation Engine,IE)。

後兩者可根據PCH模型以及目标平台啟用或者禁用,而ME核心始終處于啟用狀态。

核心建立的第一個程序是BUP

BUP會讀取InitScript,啟動符合ME啟動類型的所有IBL程序。

BringUP

如果你仔細研究BUP子產品的工作方式,你會發現BUP中實作了一個經典的有限狀态機。執行過程從功能上分為兩個部分:

初始化階段(有限狀态機)

在系統初始化後根據其他程序的請求來執行服務。根據平台以及SKU(TXE、CSME、SPS、消費者以及企業)的不同,初始化階段的數量也會有所不同,但對于所有版本來說,主要的階段都是相同的。

1.1 階段1

初始化階段會建立sfs内部診斷檔案系統(SUSRAM FS,位于非易失性存儲區中的一個檔案系統),讀取配置資訊,最關鍵的是,會向PMC查詢哪個動作觸發了啟動過程:是平台插電、整個平台的重新開機、ME重新開機還是從睡眠中喚醒。

這個階段稱之為啟動流确定階段。有限狀态機初始化的後續階段需要依賴這一階段。此外,這一階段還支援多種模式:

普通模式以及一組服務模式,後一個模式中,主ME功能處于禁用狀态(如HAP、HMRFPO、TEMPDISABLE、RECOVERY、SAFEMODE、FWUPDATE以及FDOVERRIDE功能)。

1.2 階段2

這個階段會初始化ICC控制器,加載ICC配置檔案(負責主要消費者的時鐘頻率)。同時,這個階段會初始化Boot Guard,開啟處理器啟動确認的輪詢過程。

1.3 階段3

BUP等待來自PMC的一則資訊,以确認主處理器已啟動。随後,BUP啟動電源事件的PMC異步輪詢過程(平台的重新開機或關閉),然後進入下一階段。如果這類事件發生,那麼BUP就會執行初始化階段所請求的動作。

1.4 階段4

這個階段會初始化内部硬體。與此同時,BUP啟動heci輪詢(heci是個特殊裝置,用來接收來自BIOS或作業系統的指令),查詢BIOS中的DID(DRAM Init Done,DRAM初始化完成)資訊。這個消息可以讓ME确定主BIOS是否已完成RAM的初始化并為ME保留一個特殊的區域(UMA),之後會進入下一個階段

1.5 階段5

一旦收到DID消息,根據具體的模式不同(這個模式由多種因素決定),BUP會(以正常模式)啟動InitScript中的IBL程序,或者會在循環中挂起,隻有收到來自PMC的消息(例如收到重新開機或關閉系統的請求)才會退出循環。

正是在這個階段,我們找到了HAP處理過程。在這個模式中,BUP會挂起,不會執行InitScript。這意味着正常模式中的後續動作與HAP沒有關系,是以也不需要去考慮。我們需要重點關注的是,在HAP模式下,BUP會初始化整個平台(ICC、Boot Gurad),但不會啟動主ME程序。

繼續閱讀