專利名稱:在操作系統(tǒng)(os)缺席的服務(wù)環(huán)境中供應固件的方法
技術(shù)領(lǐng)域:
本公開一般地涉及計算設(shè)備的管理,并且更具體地,涉及獨立于計算設(shè)備的操作系統(tǒng)在計算設(shè)備的固件環(huán)境中供應固件,同時計算設(shè)備保持在低功耗狀態(tài)中。
背景技術(shù):
存在用于減少計算設(shè)備能耗的各種機制。在版本4.0的高級配置和功率接口(ACPI)中定義了用于功率管理的標準技術(shù),其可以在公共互聯(lián)網(wǎng)上的URL:www-acp1-1nfo(注意使用短線替換了句點來避免在這個文檔中有無意的超鏈接)中找到。ACPI是大多數(shù)計算機系統(tǒng)目前用于功率管理的標準,并且描述了計算系統(tǒng)如何照看操作系統(tǒng)(OS)。功率管理能力使得計算設(shè)備能夠在部件和系統(tǒng)級別將其操作狀態(tài)在高功耗狀態(tài)和低功耗狀態(tài)之間轉(zhuǎn)換。操作的這些模式經(jīng)常對應地稱為喚醒和睡眠狀態(tài)或模式。ACPI規(guī)范定義了計算設(shè)備典型可以處于的七種狀態(tài)。例如,狀態(tài)S3 (“S3”),可以典型地稱為待機、睡眠(本文中也稱為“睡眠模式”),或掛起到RAM。狀態(tài)S5 (“S5”)可以稱為關(guān)機或“關(guān)閉”。多個事件可以致使計算設(shè)備在睡眠模式和喚醒模式之間轉(zhuǎn)換,即,醒來或睡去。例如,觸發(fā)計算設(shè)備轉(zhuǎn)換到睡眠的睡眠事件可能包括用戶休止或用戶選擇。當計算設(shè)備轉(zhuǎn)換到睡眠時,許多計算設(shè)備部件(例如,諸如中央處理單元(CPU)的主處理器、易失性存儲器、用于大容量存儲的磁盤驅(qū)動器等)也可能進入睡眠。一旦睡眠,計算設(shè)備可以在發(fā)生喚醒事件時喚醒。喚醒事件可以包括,例如,通過計算設(shè)備接收來自鼠標或鍵盤的輸入、電子郵件消息、來自遠程系統(tǒng)管理員的查詢。在處理了喚醒事件之后,并且在OS再次運行之前,對于計算設(shè)備的固件而言有機會執(zhí)行有用的工作而不用OS的參與。
將通過在附圖中示出的但非限制性的示例性實施例來描述本發(fā)明的實施例,在附圖中類似的附圖標記表示相似的元件,并且在其中:圖1是示出根據(jù)各個實施例的計算設(shè)備從喚醒模式向睡眠模式轉(zhuǎn)換的時間線;圖2是示出根據(jù)各個實施例的獨立于操作系統(tǒng)(OS)由固件處理喚醒事件的示例性方法的流程圖;圖3是示出根據(jù)各個實施例的計算設(shè)備中的引導和喚醒周期的框圖;圖4是示出根據(jù)各個實施例的示例性計算設(shè)備的框圖;圖5是根據(jù)各個實施例的在硬件部件上的軟件堆棧的圖;圖6是根據(jù)本發(fā)明的實施例的固件卷的圖;以及圖7是根據(jù)各個實施例的供應過程的流程圖。
具體實施例方式本發(fā)明的說明性實施例包括,但不限于,當計算設(shè)備保持在低能耗睡眠狀態(tài)時,獨立于計算設(shè)備的操作系統(tǒng),用于在計算設(shè)備的固件環(huán)境中供應固件模塊的方法和裝置。說明性實施例的各個方面將使用本領(lǐng)域的技術(shù)人員所常用的術(shù)語來進行描述以向本領(lǐng)域的其他技術(shù)人員傳遞其工作實質(zhì)。然而,對那些本領(lǐng)域技術(shù)人員顯而易見的是可以僅使用所描述方面中的一些來實施可替換的實施例。出于解釋目的,提出特定的數(shù)字、材料和配置以便提供對說明性實施例的徹底理解。但是,對本領(lǐng)域的技術(shù)人員顯而易見的是沒有特定細節(jié)也可以實施可替換的實施例。在其他的實例中,將忽略或簡化公知的特征以便不會模糊說明性的實施例。此外,各個操作將以最有助于理解說明性實施例的方式依次描述為多個分離的操作;但是,描述的順序不應解釋為暗示著這些操作必須是依賴于順序的。具體地,這些操作不需要按照呈現(xiàn)的順序來執(zhí)行。短語“在一個實施例中”被重復地使用。該短語通常不是指同一實施例;但是,也可能是。術(shù)語“包含”、“具有”和“包括”是同義的,除非上下文另作要求。圖1是示出了根據(jù)各個實施例的計算設(shè)備從喚醒模式向睡眠模式轉(zhuǎn)換的時間線。如本文中描述的,在各個實施例中,計算設(shè)備的固件能在計算設(shè)備處于睡眠模式的同時完成工作。固件能獨立于操作系統(tǒng)來完成這個工作,這導致功能的增加及減少用于計算設(shè)備的總體能耗。在實施例中,計算設(shè)備或系統(tǒng)可以是臺式計算機、膝上型計算機、移動計算設(shè)備、網(wǎng)絡(luò)服務(wù)器、瘦客戶端,或配置來使用固件的其他計算設(shè)備。在實施例中,固件可以是傳統(tǒng)基本輸入/輸出系統(tǒng)(BIOS)、可兼容的統(tǒng)一可擴展固件接口(例如,2006年的UEFI規(guī)范版本2.0)、可兼容的可擴展固件接口(例如,2004年的EFI規(guī)范版本1.10)或其他固件。注意,EFI是描述在計算設(shè)備固件和操作系統(tǒng)或其他應用環(huán)境之間的抽象可編程接口的公共產(chǎn)業(yè)規(guī)范。例如,EFI使得能夠從各種不同的資源下載固件模塊形式的固件,所述資源包括閃存設(shè)備、隨選光盤(只讀存儲器)、各種持久性存儲設(shè)備(例如,硬盤、⑶-ROM (壓縮盤-只讀存儲器)等),或者計算機網(wǎng)絡(luò)上的一個或多個計算機系統(tǒng)。更多關(guān)于統(tǒng)一 EFI (UEFI)架構(gòu)的信息可以在公共互聯(lián)網(wǎng)上的www-uefi_org(注意使用短線替換了句點來避免在這個文檔中有無意的超鏈接)中找到。因此,如在本文中描述的,在各個實施例中,在轉(zhuǎn)換到睡眠模式時,計算設(shè)備可以重新實例化包括在重引導時可用的一個或多個固件功能的UEFI或其他固件環(huán)境。在實施例中,重新實例化的固件環(huán)境可以使得固件環(huán)境能夠執(zhí)行通常由計算設(shè)備的OS所執(zhí)行的功率管理功能。在實施例中,重新實例化的固件環(huán)境可以提供新固件模塊的供應或更新現(xiàn)有的固件模塊而不牽扯操作系統(tǒng)。在實施例中,可以執(zhí)行新安裝的或新更新的固件模塊來執(zhí)行用于計算系統(tǒng)的操作。現(xiàn)在參考圖1,在示出的實施例中,在111處,可以在預引導期間通過固件環(huán)境(也稱為固件)初始化計算設(shè)備。在各個實施例中,并將在下文中詳細討論的,在這個預引導時間期間,在112處,固件可以保留一部分存儲器或郵箱,固件隨后可以從中收集數(shù)據(jù)。一旦完成預引導初始化,可將控制傳遞給計算設(shè)備的操作系統(tǒng)(OS)以繼續(xù)在113處的引導過程。在OS或系統(tǒng)引導之后,OS可以接著在115處以功能或喚醒模式來運行或操作計算設(shè)備,這包括典型地與正常操作相關(guān)聯(lián)的高能耗狀態(tài)。計算設(shè)備可以繼續(xù)以喚醒模式操作直到117,其中睡眠事件致使計算設(shè)備轉(zhuǎn)換到睡眠模式S3,這包括低能耗狀態(tài)。如在上文指出的,睡眠事件可以包括各種事件,例如,用戶選擇或用戶休止。在一段時間之后,在各個實施例中,計算設(shè)備可以接收喚醒事件。在一些實施例中,喚醒事件可以包括網(wǎng)絡(luò)事件,例如電子郵件、配置指示,或其他網(wǎng)絡(luò)傳輸。在其他的實施例中,喚醒事件可以是感知輸入設(shè)備的輸入,觸摸計算設(shè)備的鍵盤、接收某類型的網(wǎng)絡(luò)分組等。可以通過系統(tǒng)管理中斷(SMI)、控制線路改變、注冊標記,或其他結(jié)構(gòu)來啟動喚醒事件的處理。在其他的情況中,可以通過計算設(shè)備的芯片組來啟動喚醒事件的處理。此外,一些喚醒事件可以觸發(fā)計算設(shè)備的加電來用于OS的處理。其他的喚醒事件(如將聯(lián)系本公開的實施例在下文描述的)可以由固件來處理同時使計算設(shè)備保持在睡眠狀態(tài)。因此,在各個實施例中,獨立于計算設(shè)備的OS行動的固件可以確定是否能處理喚醒事件而不將整個計算設(shè)備返回到第一高能耗狀態(tài)。如果固件不能處理喚醒事件并且OS將處理喚醒事件,則在121處可以加速旋轉(zhuǎn)磁盤、開啟監(jiān)視器,并且將計算設(shè)備恢復到完全喚醒模式。處理流程可以接著返回到115,在那里OS以喚醒模式運行或操作計算設(shè)備。但是,如果固件確定能夠獨立于OS來處理喚醒事件,并且不用將整個計算設(shè)備返回到第一高能耗狀態(tài),則固件能致使喚醒事件被處理。因而計算設(shè)備在119處可以繼續(xù)睡眠。在一些實施例中,取決于喚醒事件并且不喚醒整個計算設(shè)備,固件可以喚醒一個或多個硬件部件或設(shè)備來服務(wù)或完成與喚醒事件相關(guān)聯(lián)的任務(wù)。此外,在完成事件處理之后,固件可以將硬件部件返回到包括第二低能耗狀態(tài)的睡眠模式。注意,在實施例中,在123處,以與OS將一個或多個硬件部件轉(zhuǎn)換到睡眠模型的方式相關(guān)聯(lián)地,例如過濾驅(qū)動器的固件部件可以開始監(jiān)視或收集數(shù)據(jù)。在各個實施例中,過濾驅(qū)動器可以將收集到的數(shù)據(jù)保存到在112處的預引導時間期間固件所保留的郵箱或一部分存儲器中。固件隨后可以獨立地使用收集到的數(shù)據(jù)來將需要服務(wù)喚醒事件的一個或多個硬件部件轉(zhuǎn)換到睡眠模式或從睡眠模式轉(zhuǎn)換。在實施例中,喚醒事件可以導致執(zhí)行在交運到終端用戶后供應到計算設(shè)備的固件模塊。接下來,圖2A和2B示出了根據(jù)本公開的各個實施例的獨立于OS用于處理喚醒事件的示例性方法的流程圖。在實施例中,可以由固件執(zhí)行圖2A中示出的塊。在實施例中,可以由OS執(zhí)行圖2B中示出的塊。對本領(lǐng)域的一個技術(shù)人員顯而易見的是,術(shù)語“由固件執(zhí)行”是更復雜計算設(shè)備互動的速記。在單處理器系統(tǒng)中,例如,可以由主處理器或中央處理單元(CPU)來執(zhí)行指令執(zhí)行。注意,“由固件執(zhí)行”可以意味著非操作系統(tǒng)指令可以從非易失性存儲器儲存器(固件)中獲取,與處理器相耦合并且接著由處理器執(zhí)行。處理器在加載OS之前可以訪問固件。因此,引導指令可以典型地存儲在固件引導塊中。此外,在一些實施例中,完全引導塊可以遠程地駐留,并且本地引導塊可以包含到完全引導塊的駐留位置的指針。在圖2的實施例中,計算設(shè)備或系統(tǒng)可以在塊201加電。計算平臺可以由引導塊固件在塊203初步啟動。駐留在引導塊的外部的固件其他部分可以在初步初始化中發(fā)揮作用。注意,引導塊典型地響應初始化的早期方案,例如早期存儲器初始化和中央處理器初始化。初步初始化還可以包括識別和重置存儲器,識別與計算設(shè)備相耦合的設(shè)備和部件等。在示出的實施例中,作為初步初始化的一部分或其后不久,固件可以啟動多個策略問題來確定計算設(shè)備的狀態(tài)。在塊204,固件可以確定是否能夠進行睡眠啟動行為。如果可以,過程繼續(xù)進行到塊206。如果不行,過程繼續(xù)進行到塊230。在實施例中,固件可以在塊206問詢,計算設(shè)備是否因為喚醒事件(例如,在至少一個實施例中的網(wǎng)絡(luò)喚醒事件)被喚醒或從睡眠狀態(tài)轉(zhuǎn)換出來。在各個實施例中,其中計算設(shè)備沒有因為網(wǎng)絡(luò)喚醒事件而被喚醒,但是已簡單地完成加電,則預引導過程可以繼續(xù)進行到塊208。在塊208,固件可以進行高速緩存在稍后時間需要的圖像。例如,可以高速緩存用于睡眠模式(例如,S3)的數(shù)據(jù)。接下來,在塊210,固件在該預引導時間可以保留在計算設(shè)備的有形計算機可讀存儲介質(zhì)中的一部分存儲器。在實施例中,該部分的存儲器可以用作固件的郵箱。注意,典型地計算設(shè)備資源在OS的控制之下,除非固件主動地為其自身保留這些資源。此外,在將在下文討論的各個實施例中,涉及OS可以將一個或多個硬件部件轉(zhuǎn)換為睡眠的方式的輸入/輸出(I/O)數(shù)據(jù)可以保存(例如,通過OS的監(jiān)視部件)到郵箱中以供固件在稍后時間訪問。在實施例中,還可以保留足夠的存儲器來允許固件重新初始化以前高速緩存的圖像。在示出的實施例中,在下一塊212,固件可以繼續(xù)正常的引導過程并且OS可以進行控制并被啟動。在圖2B上的塊214中,OS可以安裝部件,例如,過濾器驅(qū)動器。如將在下文所見的,過濾器驅(qū)動器可以用作監(jiān)視部件以收集涉及將硬件部件轉(zhuǎn)換為睡眠模式的I/O數(shù)據(jù)。正常的OS操作可以在塊216繼續(xù)。在決策塊218處,如果一段時間內(nèi)還沒有接收到輸入或其他計算設(shè)備策略指示,OS可以將計算設(shè)備轉(zhuǎn)換為睡眠模式。如果例如策略沒有指示將計算設(shè)備轉(zhuǎn)換為睡眠模式,則OS操作可以在塊216繼續(xù)??商鎿Q地,返回到?jīng)Q策塊218,如果計算設(shè)備將進入睡眠模式,則OS可以從決策塊218向下繼續(xù)到塊220。在實施例中,OS可以接著發(fā)送消息來通知所有的或幾乎所有硬件部件或硬件設(shè)備驅(qū)動器:硬件部件將轉(zhuǎn)換到睡眠模式。過濾器驅(qū)動器可以在塊222接收或檢測這個通知,并且開始監(jiān)視涉及將轉(zhuǎn)換到睡眠模式的一個或多個硬件設(shè)備或部件的方式的輸入/輸出(I/O)數(shù)據(jù),例如,在硬件設(shè)備接口和硬件設(shè)備驅(qū)動器之間的I/O信號。在塊224,過濾器驅(qū)動器可以接著收集I/O數(shù)據(jù)并將其保存在由固件環(huán)境在預引導時間(在塊210所描述的)保留的郵箱中。最后,在塊226,OS已完成將計算設(shè)備轉(zhuǎn)換到睡眠模式。注意如更早提到的,在塊224保存在郵箱中的I/O數(shù)據(jù)可以在稍后時間用于使固件能夠在處理喚醒事件期間和/或之后使用該I/o數(shù)據(jù)。因此,例如,返回到?jīng)Q策塊206,如果計算設(shè)備因為喚醒事件(例如,網(wǎng)絡(luò)喚醒事件)而被喚醒,則可以跟隨“是”箭頭。在塊228,在OS保持在睡眠模式的同時,固件可以確定網(wǎng)絡(luò)事件是否能由固件進行處理,獨立于OS并且不用喚醒或不用將整個計算設(shè)備返回到高能耗狀態(tài)。如果應答是“否”,則計算設(shè)備通過正常的S3代碼路徑在塊230恢復并且最終在塊212繼續(xù)正常的引導過程。但是如果應答是“是”,則固件可以致使獨立于OS來處理網(wǎng)絡(luò)事件。在一些實施例中,在塊232,固件可以僅將一個或多個(但不是全部)硬件部件喚醒或轉(zhuǎn)換為高能耗狀態(tài)和/或啟動軟件以用于處理網(wǎng)絡(luò)事件。在塊235,固件可以使用高速緩存的設(shè)備I/O來將計算設(shè)備放回到D3狀態(tài),并且如果必要,將命令寫入適當端口以致使發(fā)生向S3的轉(zhuǎn)換。因此,在各個實施例中,一旦計算設(shè)備轉(zhuǎn)換到睡眠模式,計算設(shè)備的固件環(huán)境是重新實例化的。在實施例中,使固件環(huán)境能夠執(zhí)行功率管理或通常由計算設(shè)備的OS所執(zhí)行的其他功能。在一些實施例中,不僅計算設(shè)備具有將特定硬件部件(例如,那些與由計算設(shè)備在睡眠模式期間所接收到的網(wǎng)絡(luò)傳輸相關(guān)聯(lián)的那些部件)轉(zhuǎn)換到睡眠的能力,而且固件環(huán)境能夠啟動多個另外的硬件或計算設(shè)備的其他部件轉(zhuǎn)換到喚醒模式。在各個實施例中,固件環(huán)境能夠獲取涉及將任意多個硬件設(shè)備轉(zhuǎn)換為睡眠模式的方式的I/o數(shù)據(jù)??梢詮挠晒碳陬A引導時間期間保留的郵箱中獲取這種I/o數(shù)據(jù)。在各個實施例中,固件環(huán)境能夠?qū)⒂布考D(zhuǎn)換為睡眠模式,典型地僅由OS執(zhí)行功率管理功能。在各個實施例中,固件環(huán)境能夠供應新的或更新的固件模塊?,F(xiàn)在參考圖3,實施例可以結(jié)合例如用于可擴展固件接口(EFI)的平臺創(chuàng)新框架的模塊S3恢復架構(gòu)(草案審議,版本0.9,2003年9月16日),其在www-1ntel_com/technology/framework (注意句點已用短線替換來避免不必要的超鏈接)處可獲得。典型地,例如,根據(jù)2009年5月8日公布的UFEI平臺初始化(PI)規(guī)范版本2.3,可以在從S5模式(“關(guān)閉”)的引導期間調(diào)用完全實現(xiàn)的PI Pre-EFI(PEI)模塊和PI驅(qū)動器執(zhí)行環(huán)境(DEX)驅(qū)動器。結(jié)果是,可以創(chuàng)建由pre-OS應用使用的UEFI環(huán)境,所述pre-OS應用例如為UEFI殼、第三方UEFI驅(qū)動器/隨選R0M,和UEFI OS加載器。但是在S3期間,因為S3恢復時間限制,計算設(shè)備可以運行標準PI恢復流,其可以典型地僅包括PEI的子集而不包括DXE。同樣地,在S3恢復模式期間,富UEFI驅(qū)動器特征可能是不可得的。但是,本公開的各個實施例可以提供,在S3期間計算設(shè)備可以實現(xiàn)DXE330。因此,如在圖3中所示的,S3可以包括DXE來在一些pre-OS的隔離(或OS驅(qū)動器的固定)頁面中重新創(chuàng)建UEFI環(huán)境來用于在OS處于睡眠模式的同時運行UEFI引導服務(wù)應用。現(xiàn)在參考圖3,在實施例中示出,框圖300示出了根據(jù)UEFI架構(gòu)實現(xiàn)的引導和喚醒周期。在實施例中,在在加電或重置之后正常的引導301期間,可以開始預先存儲器初始化安全(SEC)階段302(“SEC302”)。SEC302可以支持將在計算設(shè)備上執(zhí)行的初始操作代碼的安全檢查。接下來,在實施例中,SEC302可以轉(zhuǎn)換到CPU/存儲器初始化的pre-EFI (PEI)階段304 (“PEI304”)。例如,PEI304可以提供用于處理器、芯片組和主板的加載和調(diào)用具體初始化(INIT)配置程序的方法。PEI304可以發(fā)現(xiàn)存儲器并且準備資源圖,該資源圖可以切換到后來初始化的驅(qū)動器執(zhí)行環(huán)境(DXE)階段306 (“DXE306”)。DXE306可以包括調(diào)用負責初始化處理器、芯片組和平臺部件的DXE驅(qū)動器,以及提供用于控制臺和引導設(shè)備的軟件抽象。如在310示出的,DXE306可以保存1/0控制器設(shè)置作為在保留存儲器(例如非易失性儲存器(NVS))中的引導腳本表的一部分。引導腳本可以包括在S3重新啟動時重放的一組動作,以將計算設(shè)備帶回到其轉(zhuǎn)換到睡眠狀態(tài)之前的狀態(tài)。典型的引導腳本將恢復1/0設(shè)備和CPU狀態(tài)信息。如在319處看到的,在S3恢復引導時,可以實現(xiàn)SEC320。接下來,在325處,S3PEI模塊可以從在310中NVS恢復PEI階段配置,例如,芯片組(CS)、硬件(HW)和視頻設(shè)置的基本恢復。因此,在實施例中,可以在OS處于睡眠中的同時在S3期間實現(xiàn)更新的DXE330??梢酝ㄟ^若干部件或階段來促進DXE330,包括S3DXE初始化程序加載(IPL) 335、S3DEX核心340、S3DEX固件卷(FV)345、S3引導設(shè)備選擇(BDS)350、S3DXE網(wǎng)絡(luò)代理動作355,和S3DXE終止器360。如在上文提出的,可以用包括S3中的DXE330的結(jié)果來實現(xiàn)基本上完全形成的UEFI接口的實例。典型地,在預引導階段期間僅可以加入少量UEFI驅(qū)動器。但是在實施例中,OS驅(qū)動器可以將另外的UEFI驅(qū)動器加入到UEFI環(huán)境中。在各個實施例中,可以從交替源收集UEFI驅(qū)動器。在一些實施例中,可以在UEFI系統(tǒng)分區(qū)上或經(jīng)由其他方法來供應這些另外的驅(qū)動器,以增加在DEX330期間可用的UEFI驅(qū)動器的數(shù)量。圖4示出了其中駐留本公開的實施例的示例性計算設(shè)備400。在各個實施例中,計算設(shè)備400包括經(jīng)由總線420耦合的各個元件。如所示的,元件可以包括處理器401、存儲器410、芯片組403、硬件設(shè)備460、非易失性儲存器430 (例如閃速存儲器)和通信接口 415。可以向芯片組403賦予之前描述的固件。存儲器410可以包括0S422、之前描述的郵箱435,和設(shè)備驅(qū)動器480。處理器401可以是能夠執(zhí)行軟件的任意類型的處理器,例如微處理器、數(shù)字信號處理器、微控制器等。雖然圖4僅示出了一個這樣的處理器401,但是在計算設(shè)備400中可以有一個或多個處理器并且一個或多個處理器可以包括多線程、多核心等。在各個實施例中,通過監(jiān)視在一個或多個硬件設(shè)備406的硬件接口和設(shè)備驅(qū)動器480之間進行通信的總線420上的I/O信號,BIOS433的固件模塊可以確定或收集信息,所述信息涉及一個或多個硬件設(shè)備460在第一高功耗狀態(tài)和第二低功耗狀態(tài)之間的轉(zhuǎn)換。雖然在睡眠狀態(tài)中,但是固件可以如之前描述的那樣處理一個或多個網(wǎng)絡(luò)或喚醒事件。通信接口 415可以包括例如網(wǎng)絡(luò)接口卡(NIC)等的網(wǎng)絡(luò)接口。NIC可以經(jīng)由例如局域網(wǎng)(LAN)的串行接口來可通信地耦合到包括一個或多個遠程服務(wù)器482的互聯(lián)網(wǎng)/網(wǎng)絡(luò)475。通信接口可以支持傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)、超文本傳輸協(xié)議(HTTP),或簡單對象訪問協(xié)議(S0AP),或其他通信協(xié)議。NIC可以使用其他方式來通過網(wǎng)絡(luò)進行通信,例如,集成驅(qū)動電路(IDE)重定向(未示出)或其他方式。注意在實施例中,處理喚醒事件可以包括但不限于,響應特定分組類型、使動態(tài)主機配置協(xié)議(DHCP)保持租賃活躍、低功率后臺活動,例如,為存儲器進行病毒掃描,和遠程文件備份/恢復等。在示出的實施例中,芯片組403還可以包括用于基本輸入輸出系統(tǒng)(BIOS) 409的軟件接口。圖5是根據(jù)各個實施例的在硬件部件上的軟件堆棧的圖。在實施例中,在用戶OS可見的環(huán)境中,低功率更新/下載(LPUD)應用500和相關(guān)聯(lián)的LPUD服務(wù)應用程序接口(API) 502可以插置在獨立軟件供應商(ISV)應用程序504、506、508和存儲軟件堆棧510(其與串行高級傳輸架構(gòu)(SATA)控制器512進行通信)之間。SATA控制器與儲存設(shè)備(在圖5中未示出)進行通信。LPUD應用在OS缺席狀態(tài)執(zhí)行各種行動;這些行動能夠包括用于病毒簽名(例如,反病毒客戶端)的磁盤掃描、將磁盤內(nèi)容遠程備份到云計算備份服務(wù)器(例如,備份客戶端),或作為文件服務(wù)器(例如,將MP3或MP4用于車內(nèi)娛樂PC,同時膝上電腦的主OS是掛起的并且膝上電腦處于LPUD狀態(tài))。LPUD服務(wù)API以不破壞文件系統(tǒng)的方式(例如讀操作)提供對磁盤的訪問,使得當主OS喚醒時,其不會發(fā)現(xiàn)磁盤處于損壞的狀態(tài)。LPUD服務(wù)API還提供套接字庫來執(zhí)行發(fā)送和接收操作,以便支持備份(例如,發(fā)送來自客戶端的數(shù)據(jù))和防病毒(AV)掃描(例如,接收簽名文件)。一旦主OS喚醒,用戶OS端可以從LPUD接收狀態(tài)信息,或當用戶OS不忙時,用戶OS可以啟動到LPUD狀態(tài)的轉(zhuǎn)移。還有,用戶OS將提供用于LPUD應用的帶內(nèi)行動的控制臺,包括但不限于,選擇參加(opting-1n)以及決定隔絕多少存儲器用于LPUD (因為該物理存儲器不再屬于用戶OS并且影響性能)。在實施例中,在固件環(huán)境中,EFI B10S514(存儲在NVS430中作為圖4的B10S433)包括至少若干個部件。新技術(shù)文件系統(tǒng)(NTFS)驅(qū)動器516與硬驅(qū)動器518通信以讀和寫數(shù)據(jù)。網(wǎng)絡(luò)接口控制器(NIC)驅(qū)動器520與NIC522通信以在與計算設(shè)備耦合的網(wǎng)絡(luò)上讀和寫數(shù)據(jù)。如在UEFI2.3規(guī)范的附錄E.2命令和數(shù)據(jù)塊(⑶B)所定義的,WiFi分隔片(shim)提供UEFI UNDI接口,其向計算平臺中的無線Nic (W-NIC)提供原始數(shù)據(jù)報讀和寫;這能夠包括第三方W-NIC或基于管理引擎(ME)的W-1NC,其中UNDI⑶B通過芯片組(可從Intel公司商業(yè)獲取)的主機擴展命令接口(HECI)進行代理??梢园晒芾硪?ME)526來提供帶外芯片組面向網(wǎng)絡(luò)管理能力。EFI LPUD代理528調(diào)整供應新固件模塊和/或更新現(xiàn)存的固件模塊,與此同時計算設(shè)備處于睡眠狀態(tài)。可以包括超文本傳輸協(xié)議(HTTP) /HTTP安全(HTTPS)插件530來影響LibSocket,并且可以包括Lib C包裝器532來提取類POSIX編程API。固件模塊534包括新的或更新的固件模塊,該固件模塊可以從ISV獲得并且安裝到如本文所公開的計算設(shè)備中。在實施例中,EFI B10S514還可以包括S3DXE使能標志536和公共驗證密鑰538 (在一個實施例中稱為Kpub_s3extention_verification)。在實施例中,計算設(shè)備具有在工廠制造過程期間安裝在系統(tǒng)板上的EFI BIOS固件和至少一個S3DX IPL固件模塊。在EFI BIOS中的S3DXE使能標志536可以在制造時設(shè)置為“假”。隨后可以將計算設(shè)備運送給用戶。雖然由用戶進行操作,但是計算設(shè)備可以經(jīng)由S4狀態(tài)(休眠)或S5狀態(tài)(全功率周期)引導到OS中。用戶可以經(jīng)由OS和傳統(tǒng)的網(wǎng)絡(luò)瀏覽器訪問所選的網(wǎng)站來下載S3DXE固件卷。圖6是根據(jù)本發(fā)明的實施例的S3DXE固件卷600的圖。固件卷600包括二進制文件,該二進制文件具有固件卷卷頭608和覆蓋固件卷內(nèi)容的密碼簽名606。固件卷600還包括一個或多個固件模塊602。在實施例中,固件模塊具有“.efi”文件擴展名。在實施例中,固件模塊包括驅(qū)動器。固件模塊602包括用于一個或多個S3DXE IPL固件模塊的固件二進制代碼。在本發(fā)明的實施例中,如本文中進一步所述地,固件模塊可以從固件卷中讀取、安裝在非易失性儲存器430中,并且可以在低功耗狀態(tài)期間執(zhí)行。固件卷還包括清單604。清單604聲明了當執(zhí)行S3DXE固件卷時將消耗或使用什么樣的計算設(shè)備硬件資源(I/O設(shè)備、存儲器等)。S3DXE固件卷之前由第三方(例如,獨立軟件供應商(ISV)、原來的設(shè)備制造商(0ΕΜ),或獨立的BIOS供應商(IBV))使用具有相關(guān)聯(lián)的私鑰(Kpir_s3extension_verification)的簽名服務(wù)器進行簽名。OS在場應用程序可以接著提示用戶查詢用戶是否希望安裝S3DXE擴展固件模塊。如果用戶確實想要安裝固件模塊,則在一個實施例中OS在場應用以到存儲在非易失性儲存器中的S3DXE固件卷的指·針調(diào)用Update Capsule UEFI運行時服務(wù)。當重新啟動(熱啟動或S3狀態(tài),取決于EFI BIOS固件如何實現(xiàn)UpdateC apsule運行時服務(wù),其應當對用戶是不透明的)時,EFI BIOS固件在非易失性儲存器中檢測S3DXE固件卷的存在。圖7是根據(jù)各個實施例的供應過程的流程圖。在實施例中,在計算設(shè)備處于如圖3所示的睡眠狀態(tài)中的同時可以執(zhí)行這個過程。在塊700,EFI BIOS固件確定在S3DXE固件卷上的密碼簽名606是否使用公共驗證密鑰(Kpub_s3extension_verification)進行驗證。如果驗證,則在塊702,EFI BIOS固件檢查以確定固件卷清單所請求的硬件資源是否可用。如果可用,則在塊704,EFI BIOS確定在固件卷中的固件模塊是否與現(xiàn)有的已安裝固件(例如,已滿足其獨立性,是目前正確的指令集架構(gòu)等)兼容。如果兼容,則在塊706,EFIBIOS在非易失性存儲器中保留足夠大的存儲器空間來支持將被來自固件卷的新的或更新的固件模塊所使用的資源。在塊708,EFI BIOS設(shè)置S3DXE使能標志為“真”。如果在塊700,702和704,有任何檢查失敗,則過程繼續(xù)到塊710。在塊710,EFI BIOS創(chuàng)建系統(tǒng)表條目。系統(tǒng)表具有如UEFI2.3規(guī)范的4.6節(jié)所描述的EFI配置表。其允許安裝由供應商⑶ID所命名的一系列額外的表。在這種情況下,EFI BIOS將創(chuàng)建具有布爾值的表,布爾值“真”用于成功而布爾值“假”用于失敗。系統(tǒng)表條目包括響應于Update Capsule運行時服務(wù)調(diào)用來將涉及固件模塊的執(zhí)行的狀態(tài)值返回到OS的狀態(tài)結(jié)構(gòu)。這是在離開S3并喚醒系統(tǒng)之后完成的,以便將來自嵌入式S3處理環(huán)境的狀態(tài)信息傳遞回主要的主機OS。在塊712,如果S3EXE使能標志是“真”,則在塊714返回成功狀態(tài),并且可以執(zhí)行固件模塊。否則,在塊716可以返回失敗狀態(tài)。
在實施例中,為所使用的硬件資源提供存儲器的可替換方法是:為OS “固定(pin)”或保留S3DXE固件模塊將使用的OS頁,并將(可能是分散的)頁列表傳遞到UpdateCapsule運行時服務(wù)調(diào)用。因此,固件不會從OS存儲器映射竊取存儲器,而是相反地將從OS取得分散的頁列表,并且使得這些頁在其后是“固件保留的”,并且使用它們用于啟動S3DXE固件1吳塊。在實施例中,OS安裝器能將S3DXE固件卷放入到在UEFI服務(wù)分區(qū)的目錄中,并且經(jīng)由Update Capsule調(diào)用來傳遞固件卷的位置。在另一實施例中,EFI BIOS可以探測用于固件卷的UEFI系統(tǒng)分區(qū)。在任一情況下,EFI BIOS在將固件卷的內(nèi)容拷貝到連續(xù)的S3DXE激活所使用的存儲器之前,用密碼來驗證固件卷的內(nèi)容。在實施例中,在連續(xù)的S3恢復時,如果S3DXE使能標志是“真”,則EFI BIOS可以在返回到睡眠和/或?qū)⒖刂苽鬟f到OS恢復矢量之前,啟動S3DXE IPL和來自S3DXE固件卷的相關(guān)聯(lián)固件模塊。因此,已描述了單觸供應模式,在其中OS作主機的安裝器能在低功耗狀態(tài)下激活固件模塊下載能力。這種能力可以在計算設(shè)備已交運到用戶之后激活。這允許實體提供S3DXE IPL代碼和驗證密鑰基礎(chǔ)設(shè)施到第三方作為EFI BIOS中的小“鉤子”,但是在交運之后,能夠?qū)⒐碳砑尤氲接嬎阍O(shè)備以用于在OS掛起的S3DXE環(huán)境中執(zhí)行。本文中描述的技術(shù)并不限制于任何特定的硬件或軟件配置;其可以在任何計算、消費性電子產(chǎn)品或處理環(huán)境中找到適用性。該技術(shù)可以用硬件、軟件,或二者組合來完成。該技術(shù)可以用在可編程機器上執(zhí)行的程序來實現(xiàn),所述可編程機器例如為移動的或靜止的計算機、個人數(shù)字助理、機頂盒、蜂窩電話和尋呼機、消費性電子設(shè)備(包括DVD播放器、個人視頻錄像機、個人視頻播放器、衛(wèi)星接收器、立體聲接收器、有線TV接收器),和其他電子設(shè)備,其可以包括處理器、處理器可訪問的存儲介質(zhì)(包括易失性的和非易失性的存儲器和/或儲存元件),至少一個輸入設(shè)備,和一個或多個輸出設(shè)備。本領(lǐng)域的一個普通技術(shù)人員可以理解,本公開能夠用各種系統(tǒng)配置來實施,包括多處理器系統(tǒng)、迷你計算機、大型機計算機、獨立的消費電子設(shè)備等。本發(fā)明還能在分布式計算環(huán)境中實施,其中任務(wù)或其部分可以由通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備來執(zhí)行。程序指令可用于致使使用指令編程的通用或?qū)S锰幚硐到y(tǒng)來執(zhí)行本文中描述的一些操作??商鎿Q地,可以由包含用于執(zhí)行操作的硬線邏輯的特定硬件部件,或通過編程的計算機部件和定制硬件部件的任意組合,來執(zhí)行操作。本文中描述的方法可以作為計算機程序產(chǎn)品來提供,其可以包括具有存儲在其上的指令的機器可訪問介質(zhì),所述指令可用于編程處理系統(tǒng)或其他電子設(shè)備來執(zhí)行所述方法。本文中使用的術(shù)語“計算機可讀介質(zhì)”應包括能夠存儲或編碼一系列指令的任意介質(zhì),所述指令由計算設(shè)備執(zhí)行且致使計算設(shè)備執(zhí)行本文中描述方法中的任意一個。術(shù)語“計算機可讀介質(zhì)”應相應地包括但不限于,固態(tài)存儲器和光盤和磁盤。此外,在本領(lǐng)域中因采取行動或引起結(jié)果以一種形式或另一種形式(例如,編程、程序、過程、應用、模塊、邏輯等)提及軟件是常見的。這樣的表達僅是陳述由處理系統(tǒng)執(zhí)行軟件來致使處理器執(zhí)行行動或產(chǎn)生結(jié)果的簡短方式。
權(quán)利要求
1.一種用于將固件模塊供應到計算設(shè)備的方法,所述方法包括: 當將所述計算設(shè)備從第一高功耗狀態(tài)向第二低功耗狀態(tài)轉(zhuǎn)換時,重新實例化包括在預引導時可用的一個或多個固件功能的固件環(huán)境; 通過所述固件環(huán)境確定在固件卷上的密碼簽名是否被驗證; 通過所述固件環(huán)境確定由所述固件卷的清單所請求的所述計算設(shè)備的硬件資源是否可用; 通過所述固件環(huán)境確定所述固件卷的至少一個固件模塊是否與所述固件環(huán)境的安裝固件兼容; 保留存儲器中的空間以容納所述至少一個固件模塊所使用的資源;以及 使用處于所述第二低功耗狀態(tài)的計算設(shè)備執(zhí)行所述至少一個固件模塊。
2.根據(jù)權(quán)利要求1所述的方法,還包括:當所述計算設(shè)備在第一高功耗狀態(tài)時,將所述固件卷下載到所述計算設(shè)備。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述固件卷包括卷頭、覆蓋所述固件卷的內(nèi)容的密碼簽名、聲明將由所述至少一個固件模塊所使用的所述計算設(shè)備的硬件資源的清單,以及所述至少一個固件模塊。
4.根據(jù)權(quán)利要求3所述的方法,其中,所述至少一個固件模塊包括用于一個或多個EFIS3DXE IPL固件驅(qū)動器的二進制代碼。
5.根據(jù)權(quán)利要求4所述的方法,其中,所述固件環(huán)境包括在制造所述計算設(shè)備時被設(shè)置為“假”的S3DXE IPL使能標志,并且還包括當所述密碼簽名已被驗證、所述硬件資源可用,并且所述至少一個固件模塊是兼容的時,將所述S3DXE IPL使能標志設(shè)置為“真”。
6.根據(jù)權(quán)利要求5所述的方法,還包括:在連續(xù)的S3恢復時,如果S3DXEIPL使能標志為“真”,則在將控制傳遞到操作系統(tǒng)恢復矢量之前,啟動所述S3DXE IPL和來自所述固件卷的相關(guān)聯(lián)的固件模塊。
7.根據(jù)權(quán)利要求1所述的方法,其中,由不是所述計算設(shè)備的制造商的一方提供所述固件卷并對其進行簽名,并且所述固件卷在交運給用戶之后安裝到所述計算設(shè)備。
8.根據(jù)權(quán)利要求1所述的方法,還包括:創(chuàng)建具有狀態(tài)結(jié)構(gòu)的系統(tǒng)表條目,以用于將關(guān)于所述至少一個固件模塊執(zhí)行的狀態(tài)值返回到所述計算設(shè)備的所述操作系統(tǒng)。
9.一種計算設(shè)備,包括: 處理器; 被配置為由所述處理器操作的固件環(huán)境; 其中,所述固件環(huán)境包括多個用于將所述裝置引導到消耗第一功率級別的操作狀態(tài)的固件功能; 其中,所述固件環(huán)境還被配置為重新實例化以包括用于當所述裝置從所述操作狀態(tài)轉(zhuǎn)換到消耗低于所述第一功率級別的第二功率級別的睡眠狀態(tài)時,引導所述裝置的所述固件功能的至少一個子集,以使得所述固件環(huán)境能夠 通過所述固件環(huán)境確定在固件卷上的密碼簽名是否被驗證; 通過所述固件環(huán)境確定由所述固件卷的清單所請求的所述計算設(shè)備的硬件資源是否可用; 通過所述固件環(huán)境確定所述固件卷的至少一個固件模塊是否與所述固件環(huán)境的安裝固件兼容; 保留存儲器中的空間以容納所述至少一個固件模塊所使用的資源;以及 使用處于所述第二低功耗狀態(tài)的計算設(shè)備執(zhí)行所述至少一個固件模塊。
10.根據(jù)權(quán)利要求9所述的計算設(shè)備,其中,當所述計算設(shè)備在第一高功耗狀態(tài)時,所述處理器將所述固件卷下載到所述計算設(shè)備。
11.根據(jù)權(quán)利要求9所述的計算設(shè)備,其中,所述固件卷包括卷頭、覆蓋所述固件卷的內(nèi)容的密碼簽名、聲明將由所述至少一個固件模塊所使用的所述計算設(shè)備的硬件資源的清單,以及所述至少一個固件模塊。
12.根據(jù)權(quán)利要求11所述的計算設(shè)備,其中,所述至少一個固件模塊包括用于一個或多個EFI S3DXE IPL固件驅(qū)動器的二進制代碼。
13.根據(jù)權(quán)利要求12所述的計算設(shè)備,其中,所述固件環(huán)境包括在制造所述計算設(shè)備時被設(shè)置為“假”的S3DXE IPL使能標志,并且其中當所述密碼簽名已被驗證、所述硬件資源可用,并且所述至少一個固件模塊是兼容的時,所述固件環(huán)境將S3DXE IPL使能標志設(shè)置為“真”。
14.根據(jù)權(quán)利要求13所述的計算設(shè)備,其中,在連續(xù)的S3恢復時,如果S3DXEIPL使能標志為“真”,則在將控制傳遞到操作系統(tǒng)恢復矢量之前,所述固件環(huán)境啟動所述S3DXE IPL和來自所述固件卷的相關(guān)聯(lián)的固件模塊。
15.根據(jù)權(quán)利要求9所述的計算設(shè)備,其中,由不是所述計算設(shè)備的制造商的一方提供所述固件卷并對其進行簽名,并且所述固件卷在交運給用戶之后安裝到所述計算設(shè)備。
16.根據(jù)權(quán)利要求9所述的計算設(shè)備,其中,所述固件環(huán)境創(chuàng)建具有狀態(tài)結(jié)構(gòu)的系統(tǒng)表條目,以用于將關(guān)于 所述至少一個固件模塊執(zhí)行的狀態(tài)值返回到所述計算設(shè)備的所述操作系統(tǒng)。
17.—種包括一個或多個指令的計算機可讀介質(zhì),當在計算設(shè)備的處理器上執(zhí)行所述指令時,通過以下操作執(zhí)行一個或多個操作來將固件模塊供應到所述計算設(shè)備: 當將所述計算設(shè)備從第一高功耗狀態(tài)向第二低功耗狀態(tài)轉(zhuǎn)換時,重新實例化包括在預引導時可用的一個或多個固件功能的固件環(huán)境; 通過所述固件環(huán)境確定在固件卷上的密碼簽名是否被驗證; 通過所述固件環(huán)境確定由所述固件卷的清單所請求的所述計算設(shè)備的硬件資源是否可用; 通過所述固件環(huán)境確定所述固件卷的至少一個固件模塊是否與所述固件環(huán)境的安裝固件兼容; 保留存儲器中的空間以容納所述至少一個固件模塊所使用的資源;以及 使用處于所述第二低功耗狀態(tài)的計算設(shè)備執(zhí)行所述至少一個固件模塊。
18.根據(jù)權(quán)利要求17所述的計算機可讀介質(zhì),其中,還包括用于當所述計算設(shè)備在第一高功耗狀態(tài)時將所述固件卷下載到所述計算設(shè)備的指令。
19.根據(jù)權(quán)利要求17所述的計算機可讀介質(zhì),其中,所述固件卷包括卷頭、覆蓋所述固件卷內(nèi)容的密碼簽名、聲明將由所述至少一個固件模塊所使用的所述計算設(shè)備的硬件資源的清單,以及所述至少一個固件模塊。
20.根據(jù)權(quán)利要求19所述的計算機可讀介質(zhì),其中,所述至少一個固件模塊包括用于一個或多個EFI S3DXE IPL固件驅(qū)動器的二進制代碼。
21.根據(jù)權(quán)利要求20所述的計算機可讀介質(zhì),其中,所述固件環(huán)境包括在制造所述計算設(shè)備時被設(shè)置為“假”的S3DXE IPL使能標志;并且還包括用于當所述密碼簽名已被驗證、所述硬件資源可用,并且所述至少一個固件模塊是兼容的時,設(shè)置所述S3DXE IPL使能標志為“真”的指令。
22.根據(jù)權(quán)利要求21所述的計算機可讀介質(zhì),還包括指令用于:在連續(xù)的S3恢復時,如果S3DXE IPL使能標志為“真”,則在將控制傳遞到操作系統(tǒng)恢復矢量之前,啟動所述S3DXE IPL和來自所述固件卷的相關(guān)聯(lián)的固件模塊。
23.根據(jù)權(quán)利要求17所述的計算機可讀介質(zhì),還包括指令用于:創(chuàng)建具有狀態(tài)結(jié)構(gòu)的系統(tǒng)表條目,以用于將關(guān)于所述至少一個固件模塊執(zhí)行的狀態(tài)值返回到所述計算設(shè)備的所述操作 系統(tǒng)。
全文摘要
一種方法和裝置,用于當計算設(shè)備從第一高功耗狀態(tài)向第二低功耗狀態(tài)轉(zhuǎn)換時,重新實例化包括在預引導時可用的一個或多個固件功能的固件環(huán)境。固件環(huán)境確定在固件卷上的密碼簽名是否被驗證;由固件卷的清單所請求的計算設(shè)備的硬件資源是否可用;以及固件卷的固件模塊是否與固件環(huán)境的安裝固件兼容。如果是,則固件環(huán)境保留存儲器中的空間以容納固件模塊所使用的資源,并且執(zhí)行固件模塊,而計算設(shè)備在第二低功耗狀態(tài)。
文檔編號G06F9/44GK103221919SQ201180055215
公開日2013年7月24日 申請日期2011年11月7日 優(yōu)先權(quán)日2010年11月16日
發(fā)明者V·齊默, A·M·貝利, J·W·愛德華茲, R·康納, Y·F·李, D·唐 申請人:英特爾公司