专利摘要:
本發明提供用於使韌體在由一非x86平台(諸如一ARM平台)執行之同時提供一經模擬之系統管理模式(SMM)之技術。回應於自一作業系統(OS)介面驅動程式接收一服務呼叫,該韌體可判定由該服務呼叫識別之一經請求服務。然後,該韌體可識別一恰當服務處理常式來執行該經請求服務。在該恰當服務處理常式執行該經請求服務之後,該恰當服務處理常式通知該OS介面驅動程式。因為該SMM由該韌體來仿真,所以可在一x86平台或一非x86平台(諸如一ARM平台)上執行該韌體。
公开号:TW201312458A
申请号:TW101104085
申请日:2012-02-08
公开日:2013-03-16
发明作者:Timothy Andrew Lewis
申请人:Phoenix Tech Ltd;
IPC主号:G06F9-00
专利说明:
用於X86及非X86處理器之安全應用韌體環境
本發明係關於用於能夠提供服務集的韌體之方法,而與該韌體處於x86平台上抑或非x86平台(諸如ARM處理器)上無關。
M央處理單元(CPU)(或簡稱「處理器」)為負責實行電腦程式的指令之電腦系統之硬體組件。兩類型之處理器為ARM處理器及x86處理器。ARM處理器具有相對簡單架構,該相對簡單架構使得ARM處理器適宜於低功率應用。結果,ARM處理器在行動及嵌入式電子器件市場已成為主導處理器。術語x86指代基於Intel 8086 CPU之指令集架構家族。X86處理器更適宜於較高功率環境且廣泛用於現代PC中。
在ARM處理器與x86處理器之間的區別為x86處理器擁有系統管理模式(SMM)而ARM處理器不擁有。SMM為為韌體保留之特別操作模式。SMM由韌體用來以不可能受到作業系統或應用程式干擾之安全方式來執行某些功能。
存在在作業系統執行的同時應用程式可藉以與韌體之服務互動或參與韌體之服務之各種方式。一方式涉及到使用舊版x86真實模式介面。舊版x86真實模式介面於1980年與IBM PC一併問世,且使用x86軟體中斷指令(INT)來迫使CPU跳至一預定義位址,該預定義位址識別至韌體之進入點。可使用CPU暫存器或緩衝器來在應用程式與韌體之間傳遞參數。不幸地,舊版x86真實模式介面不存在於非x86(例如,ARM)平台上。另外,在一些x86韌體實施(諸如純UEFI)上不支援舊版x86真實模式介面。舊版x86真實模式介面亦具有無法存取1MB以上之記憶體的限制。
供應用程式與韌體之服務互動或參與韌體之服務之另一方式為經由實施UEFI規範。UEFI規範定義一被稱作「執行階段」之驅動程式類別,其指示該等驅動程式(及該等驅動程式所提供之服務)在作業系統執行的同時存留。此外,UEFI自身提供一執行階段服務表格,其暴露由系統韌體提供之服務及資料。EFI系統組態表格為由此表格指向之可擴展可搜尋之資料結構,且其經常用來將執行階段服務之位址提供至OS應用程式及驅動程式。然而,在非UEFI韌體上或藉由非UEFI作業系統(例如,DOS、WinXP及一些Linux產品)不能支援UEFI介面。UEFI執行階段亦不提供記憶體管理、同步或服務發現設施。
應用程式亦可經由系統管理中斷(SMI)而與韌體之服務互動或參與韌體之服務。在許多x86平台上,針對特定I/O埠或記憶體映射I/O位置之寫入操作將產生SMI。一旦偵測到該SMI,所有CPU核心切換至系統管理模式(SMM)且在一預定義位址處開始執行。寫入至該埠之實際值通常用作指明待調用的系統韌體服務之類型之函式程式碼。可在CPU暫存器、其他埠中,或經由記憶體緩衝器來傳遞額外參數。然而,SMI及SMM不存在於ARM平台上。在無來自晶片組或CPU之額外硬體支援之情況下,ARM平台不能提供SMM。
應用程式可藉以與韌體之服務互動或參與韌體之服務之另一方式涉及到ACPI規範之實施。ACPI規範描述一偽機器語言(AML),AML可由許多作業系統解譯以提供額外功能性。AML由系統韌體提供。然而,AML具有受限制之對硬體的存取權。大體上,AML僅可存取已對作業系統暴露的硬體資源。許多實施亦具有效能問題。
應用程式亦可使用客製化之作業系統(OS)驅動程式來與韌體之服務互動或參與韌體之服務。在客製化之OS驅動程式方法中,完全不使用韌體,對於每一受支援作業系統特別地製作每一OS驅動程式,使得客製化之OS驅動程式含有對於彼作業系統必要之功能性。自然,此方法要求對於每一作業系統及每一硬體平台之獨立實施,此十分耗時且耗成本。另外,此類客製化OS驅動程式將不可存取韌體組態資料(諸如安裝選項)。
使用專屬OS驅動程式/韌體介面亦可用來允許應用程式與韌體之服務互動或參與韌體之服務。除了韌體服務發現、調用、參數傳遞及環境為專屬之外,使用專屬OS驅動程式/韌體介面與使用客製化OS驅動程式相似。由韌體提供之服務的進入點可為硬編碼的、藉由查找預定義簽章來找到,或經由一些自訂可發現表格來傳遞。此方法具有較難以理解及轉送給新工程師之缺點。此外,較難以調適其他第三方韌體程式碼以使用專屬OS驅動程式/韌體介面。
此章節中之論述意圖使讀者理解先前方法,因為該等先前方法係關於本發明之實施例。然而,在此章節中所論述之先前方法的缺點不意圖作為對此類缺點為公開知曉之承認。因此,對本文中所論述之先前技術的缺點之辨別不意圖僅由於其包括於此章節中而被理解為屬於先前技術內。
有利地,本發明之實施例使得能夠自在x86及非x86處理器上之作業系統內利用系統韌體服務。本發明之實施例在不支援系統管理模式(SMM)的CPU及平台上建立模仿在X86 CPU上找到之SMM的許多屬性之執行環境(表示為SAFE)。
在一實施例中,韌體在由一或多個ARM處理器執行之同時提供經模擬之系統管理模式(SMM)。回應於自一OS介面驅動程式接收一服務呼叫,該韌體可判定由該服務呼叫識別之一經請求服務。然後,該韌體可識別一恰當服務處理常式來執行該經請求服務。在該恰當服務處理常式執行該經請求服務之後,該恰當服務處理常式通知該OS介面驅動程式。因為該SMM由韌體來仿真,所以可在不修改原始程式碼之情況下在x86平台或非x86平台(諸如ARM平台)上執行該韌體。
本文中所描述之方法不意圖描述本發明之所有實施例,因為本發明之其他實施例與在此章節中所論述之說明性方法相比可在其操作中不同。
在隨附圖式之諸圖中,藉由實例且非藉由限制來說明本發明之實施例,且其中類似參考數字指代相似元件。
描述使韌體在由非x86平台執行之同時提供經模擬之系統管理模式(SMM)之方法。在以下描述中,為了解釋之目的,闡述許多特定細節以便提供對本文中所呈現之本發明之實施例的澈底理解。然而,將顯而易見的是可在不具有此等特定細節之情況下實踐本文中所呈現之本發明之實施例。在其他情況中,以方塊圖形式展示熟知之結構及器件以便避免不必要地混淆本文中所呈現之本發明之實施例。 系統管理模式
本發明之實施例在不支援SMM之CPU及平台上建立模仿在X86 CPU上找到之系統管理模式(SMM)的屬性中之許多者的執行環境(安全應用韌體環境或簡稱為「SAFE」)。在論述根據一實施例之SAFE之前,回顧系統管理模式(SMM)將係有幫助的,因為該SAFE可在非x86平台上仿真SMM。在今日之PC中,x86架構支援系統管理模式(SMM)。此執行模式區別於其他執行模式,諸如真實模式或受保護模式。SMM具有使得其適用於管理平台及提供服務之若干特性。下文論述SMM之此等特性。
SMM提供私有且安全之執行空間。在大多數x86實施中,在聲明系統管理中斷(SMI)之後且在進入SMM之前,獨立的記憶體位址空間(SMRAM)暴露,該SMRAM在通常情況下為隱藏的(在SMM外部不提供任何讀取或寫入存取)。在許多實施中,直接記憶體存取(DMA)活動不能在此位址空間中終止。此等特性使得該執行空間對於韌體服務為理想的,因為其不能被OS軟體損毀,且結果,韌體秘密(諸如密鑰)可安全地儲存於彼處。
可使用標準調用方法(諸如軟體系統管理中斷(SMI))來進入SMM。通常,此涉及到將一值寫入至一I/O埠。一些平台亦可具有用於進入SMM之其他方法,但此類進入SMM之方法不用來提供韌體服務。因此,為了經由SMM獲得韌體服務,作業系統可預期使用標準調用方法來調用SMM。
在SMM中提供之韌體服務可支援所有作業系統。結果,韌體服務僅需要被寫入於韌體中一次以支援多個類型之作業系統。為此原因,將由SMM提供之服務稱為OS獨立型。因為該韌體已與個別平台設計緊密地聯繫,所以設計該韌體之同一研發團隊亦可處置對於此等服務所要求之客製化。最終,因為用於提供韌體服務之功能性實際駐留於韌體內,所以韌體服務為硬體平台之組成部分且不要求安裝碟片。
藉由在SMM中提供韌體服務,韌體服務可輔助晶片組/平台錯誤修正,因為可捕獲某些關鍵系統事件(諸如狀態轉變)。
由SMM提供之韌體服務亦可用來同步電腦系統之多個CPU核心。在x86平台中聲明SMI之後,所有CPU核心均進入SMM。此可具有效能暗示,因為在SMI聲明與SMI解除聲明之間的時間將使用所有CPU資源。然而,在SMM期間使得僅一單一CPU核心為作用中為高度有利的,因為如此操作消除了各種硬體資源之衝突的可能性且防止了重新進入問題。
有利地,本發明之實施例提供了韌體服務之共同執行環境,甚至在上文論述的SMM特性為可選、不存在或由非標準硬體支援之平台(諸如ARM平台)上亦然。 安全應用韌體環境概覽
圖1為根據本發明之一實施例之安全應用韌體環境(SAFE)100之說明。SAFE 100可由實施例用來將安全環境提供至韌體以在非x86平台中提供韌體服務。有利地,在本發明之實施例中,SAFE 100可支援x86及非86平台。在一實施例中,SAFE 100包含SAFE ACPI表格110、SAFE進入點120、SAFE調派程式130、SAFE環境層140、SAFE調派程式150至156,及SAFE通信緩衝器160,下文將單獨地論述其中每一者。
圖1亦描繪作業系統(OS)180。OS 180之非限制性說明性實例包括Android、Linux、Windows及DOS。OS 180(或包含於其中之特定組件)可請求使用由SAFE 100提供之某些服務。
OS 180可包括複數個功能組件,例如圖1將OS 180描繪為包含OS應用程式182、OS系統事件調派程式182、OS介面驅動程式186及服務參數緩衝器188。在圖1中所描繪之OS 180的功能組件說明一些實施例,但在其他實施例中,SAFE 100可與在實施上不同於在圖中所描繪的OS 180的作業系統一起工作。以各種方式組合所有該等OS元件(OS應用程式182、OS系統事件調派程式184及OS介面驅動程式186)係完全可行的,此取決於由OS應用程式182執行於之作業系統所提供之精確架構及服務等級。舉例而言,在不存在任何真實驅動程式介面或事件調派程式之DOS中,此等元件均可與OS應用程式組合。
OS應用程式182表示使用由SAFE 100提供的執行階段服務之原生作業系統應用程式。舉例而言,某些OEM可提供負責檢查電池狀態或報告硬體組件溫度之OS應用程式182。在OS應用程式182與OS介面驅動程式186之間的精確繫結特定針對特定類型之OS 180,但大體上此類繫結包括初始化應用程式工作階段及發送SAFE命令。為了簡明,在圖1中僅描繪一個OS應用程式182;然而,OS 180可包含任何數目個OS應用程式。
OS系統事件調派程式184表示控制系統狀態(諸如關機、重設及睡眠)及計時器通知之一或多個OS實體。由OS系統事件調派程式184控制之計時器通知模仿由x86平台上的硬體提供之通知。舉例而言,OS系統事件調派程式184可使得有關方能夠向OS系統事件調派程式184註冊以在某些事件(諸如系統狀態改變)發生時被通知。
OS介面驅動程式186負責管理在OS應用程式182與SAFE 100之間的通信、向OS系統事件調派程式184註冊以獲得系統事件之通知,及按要求同步CPU核心。
服務參數緩衝器188為用於儲存與個別SAFE服務呼叫(其由OS 180或OS 180之組件向SAFE 100起始)相關聯之參數之一緩衝器或在記憶體中之位置。
關於SAFE 100之組件,SAFE ACPI表格110為以在ACPI規範中所描述之系統描述表格結構開始之表格。SAFE ACPI表格110含有SAFE進入點120及SAFE通信緩衝器160之位址。SAFE ACPI表格110告知OS介面驅動程式186:如何向韌體請求服務、如何與該服務請求一起傳遞資訊及如何自韌體接收資訊。
圖6為根據本發明之一實施例之例示性SAFE ACPI表格110之描繪600。圖6說明SAFE ACPI表格110之實施例的欄位之簽章及格式。在圖6中所描繪之前九個欄位(Header Signature至Creator Revision)對應於由ACPI規範描述之標準欄位。剩餘欄位(EntryPoint至ParmBuffer)對應於由SAFE 100之實施例利用之擴展欄位。請注意,圖6僅描繪可實施SAFE ACPI表格110之一種方式,熟習此項技術者將瞭解SAFE ACPI表格110之結構可基於SAFE 100之實施的需要而變化。
SAFE進入點120為由OS介面驅動程式186調用之執行位址。SAFE進入點120可對應於SAFE調派程式130之位址或可指向負責使得SAFE 100環境可見且負責呼叫SAFE調派程式130之另一實體。SAFE進入點120為使得OS介面驅動程式186能夠被告知如何呼叫SAFE調派程式130之機構。請注意,圖6描繪在欄位610中之說明性SAFE進入點120。
SAFE調派程式130為一驅動程式,該驅動程式負責初始化SAFE 100、處置SAFE服務處理常式150至158之註冊,及基於SAFE通信緩衝器160之內容調派SAFE服務處理常式150至158。SAFE調派程式130產生SAFE子調派協定(用於註冊SAFE服務處理常式150至158)、SW SMI子調派協定、Sx子調派協定及週期計時器子調派協定。
在一實施例中,SAFE環境層140經由產生在UEFI PI規範抑或Intel架構SMM規範中所指明之協定及表格而對應於一仿真之SMM環境。此等協定及表格包括SMM CPU I/O、SMM PCI、SMM基底、SMM組態、SMM通信及SMST。SAFE環境層140充當API集合,該API集合可由SMM韌體呼叫以允許SMM韌體在非x86平台(諸如基於ARM之平台)上操作。
SAFE服務處理常式150、152、154及156由驅動程式註冊以處置某些類別之SAFE服務呼叫。每一SAFE服務處理常式為經設計以執行一特定服務之一或多個軟體組件。舉例而言,SAFE服務處理常式150負責執行定時功能性,SAFE服務處理常式152負責執行Sx睡眠狀態功能性,SAFE服務處理常式154負責處理系統管理中斷(SMI),且SAFE服務處理常式156負責執行OEM特定之SAFE命令,諸如關於SAFE子調派、週期計時器子調派、SMI子調派及Sx子調派之功能。熟習此項技術者應瞭解在圖1中所描繪之特定SAFE服務處理常式為例示性,因為其他實施例可包含不同於在圖1中所描繪的彼等SAFE服務處理常式之SAFE服務處理常式集合。
SAFE通信緩衝器160為在調派SAFE服務處理常式150至156時由SAFE調派程式130使用之一緩衝器或記憶體部分。在一實施例中,OS介面驅動程式186用儲存於服務參數緩衝器188內之資料在SAFE通信緩衝器160內填入資料。
已描述了一實施例之SAFE 100之某些組件,現將更詳細解釋用於請求由SAFE 100提供的服務之方法。 SAFE服務呼叫
每一SAFE服務呼叫可具有一或多個屬性。SAFE服務呼叫可指明一服務GUID,該服務GUID為指明所呼叫的功能之類型的唯一識別符。該服務GUID可由SAFE調派程式130用來判定應呼叫哪一SAFE服務處理常式150至156以處置該SAFE服務呼叫。
SAFE服務呼叫亦可指明用以儲存關於該SAFE服務呼叫的資訊之在服務參數緩衝器188中之位置。該SAFE服務呼叫之服務GUID判定該SAFE服務呼叫的在服務參數緩衝器188中的資料之格式。在進入SAFE 100時,在服務參數緩衝器188中之資料指明了針對該SAFE服務呼叫之服務參數。在退出SAFE 100時,在服務參數緩衝器188中之資料指示了針對該SAFE服務呼叫之傳回值。
SAFE服務呼叫亦可指明儲存於服務參數緩衝器188中之描述該SAFE服務呼叫的資料之服務參數緩衝器大小。在進入SAFE 100時,該服務參數緩衝器大小指明在服務參數緩衝器188中的參數資料之大小。該大小可以位元組來表達。在退出SAFE 100時,該服務參數緩衝器大小指示在服務參數緩衝器188中的傳回值資料之大小。
SAFE服務呼叫亦可指明一工作階段識別符(或簡稱為「工作階段id」)。工作階段id為經設計以抵禦試圖使用同一介面之其他驅動程式的安全措施。可將工作階段id實施為在每一服務呼叫之前遞增之無正負號的整數。SAFE調派程式130可在調用SAFE服務處理常式150至156中任一者之前驗證工作階段id。OS介面驅動程式186在調用每一SAFE服務處理常式之後記錄工作階段id且清零在SAFE通信緩衝器160中之此欄位。
SAFE服務呼叫亦可指明一同步CPU核心屬性。此屬性(其可按慣例與服務GUID相聯繫)可用作用於判定在處置該SAFE服務呼叫的同時其他CPU核心是否可繼續執行或在處置該SAFE服務呼叫的同時所有其他CPU核心是否必須暫時中止之基礎。 SAFE服務
此章節論述由SAFE 100提供之若干說明性服務。然而,不意欲此章節為SAFE 100可提供之服務的詳盡清單,因為許多其他類型之服務為可能的且預期許多其他類型之服務。
圖2A為說明由根據一實施例的SAFE 100提供之某些例示性核心服務之大小、位移及描述資訊之表格。該等SAFE核心服務經設計以建立在OS介面驅動程式186與SAFE調派程式130之間的一連接。在一實施例中,此等服務中之每一者使用SCT_SAFE_CORE_SERVICES_GUID作為服務GUID。該服務參數緩衝器可以在圖2A之列210中所列出之結構開始以識別子函式。
圖2A之表格亦描繪用於函式Initialize()之進入服務緩衝器格式及退出服務緩衝器格式。該等SAFE核心服務之Initialize()成員子函式建立在OS介面驅動程式186與SAFE調派程式130之間的連接。Initialize()使用由服務參數緩衝器提供之資訊來確認呼叫者。Initialize()將工作階段id更新為隨機數且將該工作階段標記為已建立。若Initialize()成功地完成,則其將狀態傳回值欄位設定為SCT_STATUS_SUCCESS。若該工作階段已開始,則Initialize()將狀態傳回值欄位設定為SCT_STATUS_ALREADY_STARTED。若存在關於呼叫者的確認之問題,則Initialize()將狀態傳回值欄位設定為SCT_STATUS_SECURITY_VIOLATION。請注意,一旦進入,Initialize()不可確認工作階段id。
圖2A之表格亦描繪用於函式Shutdown()之進入服務緩衝器格式及退出服務緩衝器格式。該等SAFE核心服務之Shutdown()成員子函式終止在OS介面驅動程式186與SAFE調派程式130之間的連接。Shutdown()將工作階段標記為已終止。若該服務成功地完成,則Shutdown()將狀態傳回值欄位設定為SCT_STATUS_SUCCESS。
圖2A之表格亦描繪用於函式Query()之進入服務緩衝器格式及退出服務緩衝器格式。該等SAFE核心服務之Query()成員子函式傳回是否已存在針對所指明的服務GUID所註冊之SAFE服務處理常式。若該服務成功地完成且已註冊一對應SAFE服務處理常式,則Query()將狀態傳回值欄位設定為SCT_STATUS_SUCCESS。若不存在任何針對所指明的服務GUID所註冊之SAFE服務處理常式,則Query()將傳回SCT_STATUS_NOT_FOUND。
圖2B為說明由根據一實施例的SAFE 100提供之某些例示性SAFE計時器服務之大小、位移及描述資訊之表格。該等SAFE計時器服務經設計以報告及組態由OS介面驅動程式186管理之計時器的到期。在一實施例中,此等服務中之每一者使用SCT_SAFE_TIMER_SERVICES_GUID作為服務GUID。該服務參數緩衝器可以在圖2B之列220中所列出之結構開始以識別子函式。SAFE調派程式130可使用SAFE計時器服務來提供對於週期計時器子調派協定(見PI規範,版本1.2)之支援。在SAFE調派程式130不具有任何方式來告訴OS介面驅動程式186該等通知應開始之一實施例中,OS介面驅動程式186藉由在ElapsedTime中之0值週期性地呼叫函式Notify()以判定SAFE調派程式130是否希望開始規則的通知。
圖2B之表格亦描繪用於函式Notify()之進入服務緩衝器格式及退出服務緩衝器格式。SAFE計時器服務之Notify()成員子函式指示所指明量之時間已流逝且接著在下一通知之前傳回最小時間量。若該服務成功地完成,則Notify()將狀態傳回值欄位設定為SCT_STATUS_SUCCESS。
圖2C為說明由根據一實施例的SAFE 100提供之某些例示性SAFE系統狀態服務之大小、位移及描述資訊之表格。該等SAFE系統狀態服務經設計以報告如由OS介面驅動程式186偵測之系統至不同睡眠狀態(諸如S5)之轉變。在一實施例中,此等服務中之每一者使用SCT_SAFE_SYS_STATE_SERVICES_GUID作為服務GUID。SAFE調派程式130可使用SAFE系統狀態服務來提供對於為Sx子調派協定(見PI規範,版本1.2)之支援。在OS之關閉過程中SAFE系統狀態服務應由OS介面驅動程式186儘可能遲地呼叫以允許處理常式自身關閉系統之可能性。該服務參數緩衝器可以在圖2C之列230中所列出之結構開始以識別子函式。
圖2C之表格亦描繪用於函式Notify()之進入服務緩衝器格式及退出服務緩衝器格式。SAFE Sx服務之Notify()成員子函式指示系統即將進入所指明之狀態。若該函式返回,則OS將繼續其正常程序。若該服務成功地完成,則Notify()將狀態傳回值欄位設定為SCT_STATUS_SUCCESS。 軟體SMI服務
SAFE軟體SMI服務經設計以報告經仿真之「軟體SMI」。在一實施例中,此等服務中之每一者使用SCT_SAFE_SW_SMI_SERVICES_GUID作為服務GUID。該服務參數緩衝器可以如下結構開始以識別該子函式:
SAFE調派程式130可使用此子函式來提供對於SW SMI子調派協定(見PI規範,版本1.2)之支援。存在可由OS介面驅動程式186提供之兩類型的軟體SMI仿真,即軟體調用及硬體調用。在軟體調用中,OS應用程式182可藉由SCT_SAFE_SW_SMI_SERVICES_GUID服務GUID及在SubFn中之子函式來執行一SAFE服務調用。在硬體調用中,OS介面驅動程式186可向OS系統事件調派程式184註冊以當在該平台上產生特定中斷時獲得通知。所產生之精確中斷為平台特定的,但必須能夠藉由至一單一I/O或記憶體位置之單一寫入而產生。較佳地,所寫入之值應能夠被擷取。在此狀況中,OS介面驅動程式186將此轉譯為一SAFE服務調用。 SAFE通知
在一實施例中,OS介面驅動程式186可註冊以獲得各種OS事件之通知。此等通知產生具有特定GUID之SAFE服務呼叫。
可要求註冊以獲得通知之OS事件之一實例為週期計時器。OS介面驅動程式186初始地在某時間週期之後向OS 180要求一通知。所傳回之值指示針對隨後服務呼叫之時間量。此等SAFE服務呼叫可經調派以向SAFE命令處理常式156註冊,SAFE命令處理常式156負責處置週期計時器子調派呼叫。
可要求註冊以獲得通知之OS事件之一實例為狀態轉變。OS介面驅動程式186在轉變至睡眠狀態S0至S5及重設之前向OS 180要求一通知。此等SAFE服務呼叫可經調派至註冊的Sx子調派協定處理常式152。 SAFE服務調用(應用程式)
圖3為說明根據一實施例之自OS應用程式182調用SAFE服務之步驟之流程圖。圖4為說明根據一實施例之圖3的步驟之圖形描繪。
在步驟310中,OS應用程式182在服務參數緩衝器188中儲存用於SAFE服務呼叫的服務參數,包括服務GUID。然後,OS應用程式182呼叫由OS介面驅動程式186提供之介面函式。或者,可使用一軟體SMI命令埠值經由SW SMI子調派協定來調派此資訊。
在步驟320中,OS介面驅動程式186驗證SAFE介面已經初始化。若另一線緒現在正在執行一SAFE服務呼叫,則當前SAFE服務呼叫被推遲直至其他線緒退出為止。接著,該SAFE服務呼叫之處理進入MP-safe關鍵區段,且取決於該SAFE服務呼叫之「同步CPU核心」屬性,視情況將暫時中止所有其他CPU核心。OS介面驅動程式186應在一權限等級執行以向OS介面驅動程式186提供對記憶體及I/O資源之存取。OS介面驅動程式186將來自服務參數緩衝器188之針對此SAFE服務呼叫的SAFE服務GUID及服務參數複製至SAFE通信緩衝器160中。OS介面驅動程式186接著將來自先前呼叫之工作階段id複製至SAFE通信緩衝器160中且遞增該工作階段id。然後,執行跳至由SAFE進入點120指明之位址。
在步驟330中,SAFE調派程式130(若必要的話)開啟SAFE環境,驗證在通信緩衝器160中儲存之工作階段id為正確的,判定哪一SAFE服務處理常式150至158應處置在SAFE通信緩衝器160中所指明之服務GUID,及呼叫恰當之SAFE服務處理常式150至158。
在存在對於SAFE環境之硬體保護之環境(例如,通常隱藏之記憶體現暴露,外部中斷被停用及/或CPU核心經同步)中,可存在啟用或「開啟」SAFE環境所需之步驟。在x86平台上之類比動作為將一特定值寫入至一I/O埠,此起始向SMM模式之轉變。
在步驟340中,該恰當之SAFE服務處理常式(亦即,在步驟330中呼叫之SAFE服務處理常式)確認所有參數且執行所請求之功能。
在步驟350中,該恰當之SAFE服務處理常式在服務參數緩衝器188中儲存任何傳回值。
在步驟360中,SAFE調派程式130記錄工作階段id,關閉SAFE環境及傳回至OS介面驅動程式186。
在步驟370中,OS介面驅動程式186將來自SAFE服務呼叫的處理之任何傳回值提供至OS應用程式182之緩衝器,釋放任何暫時中止的核心及退出該關鍵區段。
在步驟380中,OS應用程式182檢查任何傳回值且繼續執行。 SAFE通知調用(OS事件)
圖5為說明根據一實施例之由於OS事件調用SAFE服務之步驟之流程圖。OS介面驅動程式186亦可用以藉由使用OS相關服務來將某些系統事件通知系統韌體。在x86系統中,通常由於硬體監視到此類事件而調用SMM環境。因為ARM平台通常不具有能夠監視系統事件之硬體,所以在OS介面驅動程式186與系統韌體之間的協同努力提供相似行為。SAFE通知調用與上文論述之SAFE服務調用之間的主要差異為OS介面驅動程式186而非OS應用程式182為建立者。
在步驟510中,OS系統事件調派程式184偵測OS介面驅動程式186針對其註冊了一處理常式之顯著事件。結果,OS系統事件調派程式184將控制傳遞至由OS介面驅動程式186註冊之處理常式。OS介面驅動程式186在作業系統偵測到將起始向SMM的轉變之各種事件中之一者(諸如計時器或經仿真之軟體SMI)時自作業系統接收控制。每一事件類型可具有一對應服務GUID及服務參數結構。請注意,在不支援起始向SMM的轉變之基於硬體的事件之彼等ARM平台中,OS介面驅動程式186可藉由以下動作來對其模擬:(a)向作業系統註冊以在一非SMM起始事件發生(例如,計時器中斷)時獲得通知及接著(b)藉由用恰當GUID及資料填充之SAFE通信緩衝器來呼叫SAFE進入點120。然後,OS介面驅動程式186藉由將用於SAFE服務呼叫之服務參數(包括服務GUID)儲存於服務參數緩衝器188中來調用一SAFE服務呼叫。
在步驟520中,OS介面驅動程式186驗證SAFE介面已經初始化。若另一線緒在當前執行一SAFE服務呼叫,則當前SAFE服務呼叫被推遲直至其他線緒退出為止。接著,該SAFE服務呼叫之處理進入MP-safe關鍵區段,且取決於該SAFE服務呼叫之「同步CPU核心」屬性,將視情況暫時中止所有其他CPU核心。OS介面驅動程式186應在一權限等級執行以為OS介面驅動程式186提供對記憶體及I/O資源之存取權。OS介面驅動程式186將用於此SAFE服務呼叫的SAFE服務GUID及服務參數自服務參數緩衝器188複製至SAFE通信緩衝器160中。OS介面驅動程式186接著將來自先前呼叫之工作階段id複製至SAFE通信緩衝器160中且遞增該工作階段id。接著,執行跳至由SAFE進入點120指明之位址。
在步驟530中,SAFE調派程式130(若必要的話)開啟SAFE環境,驗證儲存於通信緩衝器160中之工作階段id為正確的,判定哪一SAFE服務處理常式150至158應處置在通信緩衝器160中所指明之服務GUID,及呼叫恰當之SAFE服務處理常式150至158。
在步驟540中,該恰當之SAFE服務處理常式(在步驟530中經呼叫)確認所有參數且執行所請求之功能。
在步驟550中,恰當之SAFE服務處理常式在服務參數緩衝器188中儲存任何傳回值。
在步驟560中,SAFE調派程式130記錄工作階段id,關閉SAFE環境及傳回至OS介面驅動程式186。
在步驟570中,OS介面驅動程式186執行與通知相關聯之任何必要的內部管理任務。
在步驟580中,OS系統事件調派程式184檢查任何傳回值且繼續執行。 替代實施例
本發明之替代實施例可增強SAFE 100之安全。舉例而言,SAFE進入點120可位於非揮發性記憶體中。作為另一實例,一實施例可允許在自一預定義記憶體範圍存取時開啟一單獨的記憶體空間。此外,CPU可經加強以產生一較高優先權中斷,其中向量由韌體設定及鎖定。換言之,由於處理中斷所跳至之位址將由韌體以一防止該位址隨後被修改之方式識別。此中斷將由OS介面驅動程式186使用而不必擔心與該中斷相關聯之位址會被重新導向以識別惡意程式碼。
在ARM7處理器中,已知為TrustZone之新特徵為可用的,該新特徵提供與由在x86處理器上的SMM模式所提供之彼等硬體保護能力相似之硬體保護能力。進入此執行模式之僅有標準方式為經由軟體指令(SMC)及子函式程式碼。ARM Ltd.(ARM7處理器之提供商)已描述一系列API(稱為TrustZone API),該一系列API意圖為ARM平台提供某些標準能力,該等標準能力支援ARM7處理器之TrustZone硬體保護特徵。儘管封裝在一起,但API及硬體能力在邏輯上為分離的。在ARM術語中,管理TrustZone環境之核心程式碼被稱為「監視器」。
存在SAFE 100藉以與由ARM7處理器提供之TrustZone特徵一起工作之若干模型。在該「監視器」由第三方(諸如ARM處理器供應商)提供之彼等狀況中,SAFE 100可作為該監視器之用戶端來執行。在該韌體之初始化階段期間,當TrustZone環境正被初始化時,該監視器經具現化且SAFE 100可經具現化為該監視器之用戶端(通常藉由註冊以獲得特定SMC子函式之通知)。該通知可為至SAFE調派程式130之呼叫。用以註冊之構件及具現化之構件可隨不同監視器而變化,此係因為該機制未經標準化。在此等狀況中,自OS介面驅動程式186至SAFE進入點120之呼叫接著又使用具有經註冊的子函式之SMC指令來起始SAFE功能性。該SMC指令將起始進入TrustZone環境,該監視器將偵測所使用之子函式程式碼且又將控制轉交給SAFE調派程式130。
在未由第三方提供該監視器之彼等狀況中,SAFE 100可作為監視器來執行。在此類實施例中,一旦進入,SAFE調派程式130將儲存CPU之執行狀態(如在PI規範中所描述),執行其任務,及接著在返回之前還原CPU之執行狀態。該SMC指令亦將用以如上述起始進入TrustZone環境。
根據一實施例,該SMC子函式程式碼可用以仿真由UEFI PI規範描述之SMM基礎結構之「軟體SMI」功能性。在另一實施例中,僅使用一單一SMC子函式程式碼且僅經由軟體SMI通知來處置「軟體SMI」功能性。在此狀況中,TrustZone API(若提供的話)可為處置用於TrustZone API的特定子函式程式碼之標準UEFI PI SMM驅動程式。
儘管TrustZone環境確實提供「計時器」之概念及可能起始進入TrustZone環境的其他硬體事件,但此等事件當前未經標準化。因而,設想可在未來的平台上使用經仿真事件(使用OS介面驅動程式186)及特殊TrustZone起始事件之一些混合體。亦即,平台可能使用起始TrustZone環境之特殊計時器硬體,但亦可能經由OS通知提供某些其他硬體事件(亦即,電力狀態轉變)。
在一實施例中,可在電腦系統上實施SAFE 100。圖7為說明可實施本發明之一實施例的電腦系統700之方塊圖。在一實施例中,電腦系統700包括處理器704、主記憶體706、ROM 708、儲存器件710及通信介面718。電腦系統700包括至少一處理器704以用於處理資訊。電腦系統700亦包括主記憶體706(諸如隨機存取記憶體(RAM)或其他動態儲存器件)以用於儲存待由處理器704執行之資訊及指令。主記憶體706亦可用於在由處理器704執行的指令之執行期間儲存暫時變數或其他中間資訊。電腦系統700另外包括唯讀記憶體(ROM)708或其他靜態儲存器件以用於儲存用於處理器704之靜態資訊及指令。提供儲存器件710(諸如磁碟或光碟)以用於儲存資訊及指令。
電腦系統700可耦接至顯示器712(諸如陰極射線管(CRT)、LCD監視器及電視機)以用於給使用者顯示資訊。輸入器件714(包括文數字及其他鍵)耦接至電腦系統700以用於將資訊及命令選擇傳達至處理器704。輸入器件714之其他非限制性說明性實例包括滑鼠、軌跡球或游標方向鍵以用於將方向資訊及命令選擇傳達至處理器704及用於控制在顯示器712上之游標移動。儘管在圖7中僅描繪一輸入器件714,但本發明之實施例可包括耦接至電腦系統700之任何數目個輸入器件714。
本發明之實施例係關於用於實施本文中所描述的技術之電腦系統700之使用。根據本發明之一實施例,回應於處理器704執行在主記憶體706中所含有的一或多個指令之一或多個序列,電腦系統700執行彼等技術。可將此類指令自另一機器可讀媒體(諸如儲存器件710)讀取至主記憶體706中。在主記憶體706中所含有的指令之序列的執行使得處理器704執行本文中所描述之程序步驟。在替代實施例中,可使用硬連線電路來代替軟體指令或與軟體指令來組合以實施本發明之實施例。因而,本發明之實施例不限於硬體電路與軟體之任何特定組合。
如本文中所使用之術語「機器可讀儲存媒體」指代參與儲存可經提供至處理器704以用於執行之指令的任何媒體。此類媒體可採用許多形式,包括(但不限於)非揮發性媒體及揮發性媒體。非揮發性媒體包括(舉例而言)光碟或磁碟,諸如儲存器件710。揮發性媒體包括動態記憶體,諸如主記憶體706。
機器可讀媒體之非限制性說明性實例包括(舉例而言)軟碟、軟性磁碟、硬碟、磁帶,或任何其他磁性媒體;CD-ROM、任何其他光學媒體;RAM、PROM,及EPROM、快閃EPROM、任何其他記憶體晶片或卡匣,或電腦可讀取之任何其他媒體。
在載運一或多個指令之一或多個序列至處理器704以用於執行的過程中可涉及到各種形式之機器可讀媒體。舉例而言,該等指令可初始載運於遠端電腦之磁碟上。該遠端電腦可將該等指令載入至其動態記憶體中且將該等指令經由網路鏈路720發送至電腦系統700。
通信介面718提供與經連接至區域網路的網路鏈路720的雙向資料通信耦接。舉例而言,通信介面718可為整合服務數位網路(ISDN)卡或數據機以提供與對應類型之電話線的資料通信連接。作為另一實例,通信介面718可為區域網路(LAN)卡以提供與相容LAN的資料通信連接。亦可實施無線鏈路。在任何此類實施中,通信介面718發送及接收載運表示各種類型之資訊之數位資料串流的電信號、電磁信號或光學信號。
網路鏈路720通常經由一或多個網路而向其他資料器件提供資料通信。舉例而言,網路鏈路720可經由區域網路提供至主機電腦或至由網際網路服務提供者(ISP)操作之資料設備之連接。
電腦系統700可經由網路、網路鏈路720及通信介面718發送訊息及接收資料,包括程式碼。舉例而言,伺服器可能將所請求之用於應用程式的程式碼經由網際網路、區域ISP、區域網路來傳輸,且隨後傳輸至通信介面718。所接收之程式碼可隨其經接收而由處理器704執行,及/或儲存於儲存器件710,或其他非揮發性儲存器中以用於稍後執行。
在前述說明書中,已參考可隨不同實施變化之眾多特定細節來描述本發明之實施例。因而,對本發明之內容及申請人期望本發明所包含之內容的唯一且排他之指示係請求項之集合(包括任何隨後校正),其以此等請求項發佈之特定形式自本申請案發佈。在本文中明確地闡述之對此類請求項中含有之術語的任何定義應支配如在該等請求項中所使用的此類術語之含義。因此,在一請求項中未明確敍述之任何限制、元件、性質、特徵、優勢或屬性不應以任何方式限制此類請求項之範疇。因此,本說明書及圖式應被認為具有說明性意義而非限制性意義。
110‧‧‧安全應用韌體環境(SAFE)ACPI表格
120‧‧‧SAFE進入點
130‧‧‧SAFE調派程式
140‧‧‧SAFE環境層
150‧‧‧SAFE服務處理常式
152‧‧‧SAFE服務處理常式/Sx子調派協定處理常式
154‧‧‧SAFE服務處理常式
156‧‧‧SAFE服務處理常式/SAFE命令處理常式
160‧‧‧SAFE通信緩衝器
180‧‧‧作業系統(OS)
182‧‧‧OS應用程式
184‧‧‧OS系統事件調派程式
186‧‧‧OS介面驅動程式
188‧‧‧服務參數緩衝器
210‧‧‧列
220‧‧‧列
230‧‧‧列
600‧‧‧表格
610‧‧‧描繪
700‧‧‧電腦系統
704‧‧‧處理器
706‧‧‧主記憶體
708‧‧‧唯讀記憶體(ROM)
710‧‧‧儲存器件
712‧‧‧顯示器
714‧‧‧輸入器件
718‧‧‧通信介面
720‧‧‧網路鏈路
圖1為根據本發明之一實施例之安全應用韌體環境(SAFE)之說明;圖2A為說明由根據一實施例的SAFE提供之某些例示性核心服務之大小、位移及描述資訊之表格;圖2B為說明由根據一實施例的SAFE提供之某些例示性SAFE計時器服務之大小、位移及描述資訊之表格;圖2C為說明由根據一實施例的SAFE提供之某些例示性SAFE系統狀態服務之大小、位移及描述資訊之表格;圖3為說明根據一實施例之自OS應用程式調用SAFE服務之步驟之流程圖;圖4為說明根據一實施例之圖3的步驟之圖形描繪;圖5為說明根據一實施例之由於OS事件調用SAFE服務之步驟之流程圖;圖6為根據本發明之一實施例之例示性SAFE ACPI表格之描繪;及圖7為說明可實施本發明之一實施例的電腦系統之方塊圖。
110‧‧‧安全應用韌體環境(SAFE)ACPI表格
120‧‧‧SAFE進入點
130‧‧‧SAFE調派程式
140‧‧‧SAFE環境層
150‧‧‧SAFE服務處理常式
152‧‧‧SAFE服務處理常式/Sx子調派協定處理常式
154‧‧‧SAFE服務處理常式
156‧‧‧SAFE服務處理常式/SAFE命令處理常式
160‧‧‧SAFE通信緩衝器
180‧‧‧作業系統(OS)
182‧‧‧OS應用程式
184‧‧‧OS系統事件調派程式
186‧‧‧OS介面驅動程式
188‧‧‧服務參數緩衝器
权利要求:
Claims (22)
[1] 一種用於提供韌體服務之方法,其包含:韌體在由一或多個ARM處理器執行之同時藉由執行以下操作來提供一經模擬之系統管理模式(SMM):回應於自一作業系統(OS)介面驅動程式接收一服務呼叫,判定由該服務呼叫識別之一經請求服務;識別一恰當服務處理常式以執行該經請求服務;及在該恰當服務處理常式執行該經請求服務之後,該恰當服務處理常式通知該OS介面驅動程式。
[2] 如請求項1之方法,其中由一安全應用韌體環境(SAFE)調派程式使用與該服務呼叫相關聯之一唯一識別符來執行判定。
[3] 如請求項1之方法,其中由一SAFE調派程式來執行識別,且其中由該SAFE調派程式自向該SAFE調派程式註冊之複數個服務處理常式選擇該恰當服務處理常式。
[4] 如請求項1之方法,其中該OS介面驅動程式使用由一ACPI表格暴露之一進入點位址來進行該服務呼叫。
[5] 如請求項1之方法,其中在發佈該服務呼叫時該OS介面驅動程式暫時中止除一處理核心以外之所有其他處理核心。
[6] 如請求項1之方法,其另外包含:回應於該OS介面驅動程式接收該通知,該OS介面驅動程式釋放任何暫時中止之處理核心。
[7] 如請求項1之方法,其中該OS介面驅動程式回應於自一OS應用程式接收之一通信而發佈該服務呼叫。
[8] 如請求項1之方法,其中該OS介面驅動程式回應於自一OS系統事件調派程式接收之一通信而發佈該服務呼叫。
[9] 如請求項1之方法,其中該服務呼叫含有用以判定在處理該服務呼叫時是否應暫時中止除一處理核心以外的所有其他處理核心之一屬性。
[10] 如請求項1之方法,其中該服務呼叫涉及到由該OS介面驅動程式所管理之一計時器。
[11] 如請求項1之方法,其中該服務呼叫涉及到至一不同睡眠狀態之一轉變。
[12] 如請求項1之方法,其中能夠在不經修改的情況下在一x86平台上執行該韌體之原始程式碼。
[13] 如請求項1之方法,其中該一或多個處理器各自為一ARM7處理器,且其中該經模擬之系統管理模式(SMM)作為一監視器組件之一用戶端操作,該監視器組件管理由該一或多個處理器提供之一TrustZone環境。
[14] 如請求項1之方法,其中該一或多個處理器各自為一ARM7處理器,且其中該經模擬之系統管理模式(SMM)作為一監視器組件操作,該監視器組件管理由該一或多個處理器提供之一TrustZone環境。
[15] 一種儲存一或多個指令序列之機器可讀儲存媒體,該一或多個指令序列在由一或多個處理器執行時使得:韌體在由一或多個ARM處理器執行之同時藉由執行以下操作來提供一經模擬之系統管理模式(SMM):回應於自一OS介面驅動程式接收一服務呼叫,判定由該服務呼叫識別之一經請求服務;識別一恰當服務處理常式以執行該經請求服務;及在該恰當服務處理常式執行該經請求服務之後,該恰當服務處理常式通知該OS介面驅動程式。
[16] 如請求項15之機器可讀儲存媒體,其中由一SAFE調派程式來執行識別,且其中由該SAFE調派程式自向該SAFE調派程式註冊之複數個服務處理常式選擇該恰當服務處理常式。
[17] 如請求項15之機器可讀儲存媒體,其中該OS介面驅動程式使用由一ACPI表格暴露之一進入點位址來進行該服務呼叫。
[18] 如請求項15之機器可讀儲存媒體,其中在發佈該服務呼叫時該OS介面驅動程式暫時中止除一處理核心以外之所有其他處理核心。
[19] 如請求項15之機器可讀儲存媒體,其另外包含:回應於該OS介面驅動程式接收該通知,該OS介面驅動程式釋放任何暫時中止之處理核心。
[20] 如請求項15之機器可讀儲存媒體,其中該OS介面驅動程式回應於自一OS應用程式接收之一通信而發佈該服務呼叫。
[21] 如請求項15之機器可讀儲存媒體,其中該OS介面驅動程式回應於自一OS系統事件調派程式接收之一通信而發佈該服務呼叫。
[22] 如請求項15之機器可讀儲存媒體,其中能夠在不經修改的情況下在一x86平台上執行該韌體之原始程式碼。
类似技术:
公开号 | 公开日 | 专利标题
TWI528278B|2016-04-01|用於x86及非x86處理器之安全應用韌體環境
KR100729793B1|2007-06-20|다중 아키텍처를 위한 구성 요소 소프트웨어용 smm로더 및 실행 매커니즘
US9128736B1|2015-09-08|Common scheduling and synchronization primitives
US9098478B2|2015-08-04|Warning track interruption facility
CN100426238C|2008-10-15|Vex-虚拟扩展框架
KR100537813B1|2005-12-20|에뮬레이션 코프로세서
US6775728B2|2004-08-10|Method and system for concurrent handler execution in an SMI and PMI-based dispatch-execution framework
US7134007B2|2006-11-07|Method for sharing firmware across heterogeneous processor architectures
Zimmer et al.2017|Beyond BIOS: developing with the unified extensible firmware interface
JP2004054948A|2004-02-19|非同期のエミュレートされた割込みの同期化
US7383551B2|2008-06-03|Method and system for integrating non-compliant providers of dynamic services into a resource management infrastructure
JP6249961B2|2017-12-20|プログラムによる警告追跡割り込みファシリティの使用
JP2009015848A|2009-01-22|階層化された仮想アーキテクチャに仮想イベントを導入するための装置、方法及びシステム
JP6017706B2|2016-11-02|ピアモニタにて信頼性・可用性・保守性(ras)フローをサポートする機構
JP6316694B2|2018-04-25|クラウドスケールの異種データセンタ管理インフラストラクチャ
US9104508B2|2015-08-11|Providing by one program to another program access to a warning track facility
US8578368B2|2013-11-05|Injecting a file from the bios into an operating system
Radovici et al.2022|The Tock System Architecture
JP2018092571A|2018-06-14|電子装置、再起動方法およびプログラム
Hunt2012|A new i/o model for the real-time specification for java
Yao et al.2014|White Paper A Tour Beyond BIOS Implementing S3 Resume with EDKII
同族专利:
公开号 | 公开日
TWI528278B|2016-04-01|
US20130061242A1|2013-03-07|
US9110744B2|2015-08-18|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
US5796984A|1996-01-26|1998-08-18|Dell Usa, L.P.|Operating system independent apparatus and method for eliminating peripheral device functions|
US6106565A|1997-02-27|2000-08-22|Advanced Micro Devices, Inc.|System and method for hardware emulation of a digital circuit|
US7941647B2|1999-01-28|2011-05-10|Ati Technologies Ulc|Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination|
US8806224B2|2005-06-28|2014-08-12|Intel Corporation|Low cost trusted platform|US20140189336A1|2012-12-28|2014-07-03|Miguel Ballesteros|Methods and apparatus to support authenticated variables|
WO2014150478A1|2013-03-15|2014-09-25|Insyde Software Corp.|System and method for managing and diagnosing a computing device equipped with unified extensible firmware interface -compliant firmware|
CN103885814B|2014-03-20|2017-05-17|百度在线网络技术(北京)有限公司|在x86架构上运行ARM APK的模拟器装置和方法|
US9801056B1|2014-10-06|2017-10-24|Sprint Communications Company L.P.|Wireless communication system to secure data communications between application programming interfaces|
WO2018194667A1|2017-04-21|2018-10-25|Hewlett-Packard Development Company, L.P.|Firmware outputted keyboard code to enter operating system state|
法律状态:
优先权:
申请号 | 申请日 | 专利标题
US13/224,662|US9110744B2|2011-09-02|2011-09-02|Secure application firmware environment for X86 and non-X86 processors|
[返回顶部]