處理系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明提供了一種處理系統(tǒng)及方法。該處理系統(tǒng)包括:處理單元;存儲(chǔ)器,適用于存儲(chǔ)用于處理器執(zhí)行的固件代碼和應(yīng)用程序代碼;以及存儲(chǔ)器訪(fǎng)問(wèn)控制單元,適用于控制處理單元對(duì)存儲(chǔ)在存儲(chǔ)器中的固件代碼和應(yīng)用程序代碼的訪(fǎng)問(wèn)。存儲(chǔ)器訪(fǎng)問(wèn)控制單元適用于,當(dāng)使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí)不使能對(duì)固件代碼的訪(fǎng)問(wèn),以及當(dāng)不使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí)使能對(duì)固件代碼的訪(fǎng)問(wèn)。
【專(zhuān)利說(shuō)明】處理系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及處理系統(tǒng),特別是涉及控制處理系統(tǒng)的處理單元對(duì)處理系統(tǒng)存儲(chǔ)的固 件的訪(fǎng)問(wèn)。
【背景技術(shù)】
[0002] 安全性對(duì)諸如微處理器的處理系統(tǒng)來(lái)說(shuō)是重要考慮因素。例如,希望確保處理器 僅執(zhí)行由一段可執(zhí)行程序代碼(或等同的指令組,諸如腳本)描述的特定任務(wù)。然而,代碼 和/或代碼的執(zhí)行可能會(huì)受到攻擊。攻擊可能包括以下情況:
[0003] -未經(jīng)授權(quán)修改所存儲(chǔ)的程序代碼;
[0004] -在執(zhí)行期間修改代碼;
[0005] -代碼轉(zhuǎn)存(例如出于反向工程的目的讀取出代碼)
[0006] -未經(jīng)授權(quán)更改存儲(chǔ)器訪(fǎng)問(wèn)權(quán)限;
[0007] -從數(shù)據(jù)段執(zhí)行未經(jīng)授權(quán)的代碼。
[0008] 固件,例如基本輸入/輸出系統(tǒng)(BIOS)代碼或核心系統(tǒng)軟件代碼,通??梢宰R(shí)別 和初始化處理系統(tǒng)或電子設(shè)備的硬件子系統(tǒng)和組件。所以通過(guò)第三方對(duì)固件進(jìn)行的反向工 程可以指示出使用固件集成電路的系統(tǒng)的硬件結(jié)構(gòu)。此外,對(duì)固件成功的攻擊(諸如上面 列出的那些攻擊)能夠使第三方改變處理系統(tǒng)的操作,阻止處理系統(tǒng)正確地操作,和/或?qū)?病毒傳輸?shù)浇M件或其他系統(tǒng)/設(shè)備。
[0009] 已經(jīng)知道利用基于硬件的安全措施來(lái)保護(hù)固件,諸如將固件存儲(chǔ)到非易失性存儲(chǔ) 器(諸如只讀存儲(chǔ)器ROM)中,以致不能修改存儲(chǔ)器中的固件。然而,這種方法并不能足以 阻止第三方出于不希望的目的或未經(jīng)授權(quán)的目的來(lái)訪(fǎng)問(wèn)和分析固件。
[0010] 在第三方開(kāi)發(fā)領(lǐng)域中,第三方開(kāi)發(fā)者直接在處理系統(tǒng)上開(kāi)發(fā)和調(diào)試應(yīng)用程序,因 此這樣的安全考慮對(duì)于第三方開(kāi)發(fā)領(lǐng)域來(lái)說(shuō)是很重要的。對(duì)于這樣的開(kāi)發(fā),處理系統(tǒng)可能 需要執(zhí)行由廠商提供的在應(yīng)用程序執(zhí)行期間使用的嵌入固件,但是可能希望在應(yīng)用程序執(zhí) 行期間,出于安全原因,對(duì)第三方開(kāi)發(fā)者隱藏/保護(hù)固件。
【發(fā)明內(nèi)容】
[0011] 本發(fā)明提供了用于控制對(duì)處理系統(tǒng)的固件代碼的訪(fǎng)問(wèn)的解決方案。利用本發(fā)明可 以在片上系統(tǒng)應(yīng)用程序開(kāi)發(fā)系統(tǒng)內(nèi)部提供嵌入的并且安全的固件執(zhí)行。因此,這樣的開(kāi)發(fā) 系統(tǒng)能夠使第三方開(kāi)發(fā)者使用系統(tǒng)現(xiàn)有的固件用于應(yīng)用程序開(kāi)發(fā),同時(shí)還能夠阻止第三方 開(kāi)發(fā)者出于未經(jīng)授權(quán)的目的(諸如分析和/或反向工程)訪(fǎng)問(wèn)固件代碼。因此,實(shí)施例可 以通過(guò)控制對(duì)固件代碼的訪(fǎng)問(wèn)來(lái)限制或阻止軟件反向工程。
[0012] 根據(jù)本發(fā)明的實(shí)施例,提供一種處理系統(tǒng)。
[0013] 該處理系統(tǒng)可以是微處理器,微芯片或處理平臺(tái)。因此,處理器可以是中央處理器 (CPU)或處理器內(nèi)核。
[0014] 該系統(tǒng)還可以包括調(diào)試接口,調(diào)試接口用于使能對(duì)存儲(chǔ)器存儲(chǔ)的應(yīng)用程序代碼的 調(diào)試。存儲(chǔ)器訪(fǎng)問(wèn)控制單元可以適用于不使能調(diào)試接口,以便當(dāng)使能對(duì)固件代碼的訪(fǎng)問(wèn)時(shí) 不能進(jìn)行調(diào)試。
[0015] 存儲(chǔ)器訪(fǎng)問(wèn)控制單元可以被連接在處理器和存儲(chǔ)器之間,其中存儲(chǔ)器訪(fǎng)問(wèn)控制單 元還可以適用于截獲來(lái)自處理器的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求,并基于截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求來(lái)控制 對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)。
[0016] 存儲(chǔ)器訪(fǎng)問(wèn)控制單元可以包括寄存器,寄存器適用于存儲(chǔ)表示固件代碼在存儲(chǔ)器 中的位置的地址,以及其中存儲(chǔ)器訪(fǎng)問(wèn)控制單元還可以適用于判斷是否截獲的存儲(chǔ)器訪(fǎng)問(wèn) 請(qǐng)求是請(qǐng)求訪(fǎng)問(wèn)存儲(chǔ)在寄存器中的地址,并基于判斷結(jié)果來(lái)控制對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)。
[0017] 存儲(chǔ)器訪(fǎng)問(wèn)控制單元可以在非易失性存儲(chǔ)器(諸如只讀存儲(chǔ)器ROM)中實(shí)現(xiàn),以便 保護(hù)其不被修改。
[0018] 根據(jù)本發(fā)明的實(shí)施例,提供一種用于控制前述處理系統(tǒng)的處理單元對(duì)處理系統(tǒng)的 存儲(chǔ)器存儲(chǔ)的固件代碼和應(yīng)用程序代碼的訪(fǎng)問(wèn)的方法。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0019] 圖1是根據(jù)本發(fā)明的實(shí)施例的處理系統(tǒng)的示意性框圖;
[0020] 圖2是圖1的實(shí)施例的存儲(chǔ)器訪(fǎng)問(wèn)控制單元的示意性框圖;
[0021] 圖3描繪的是根據(jù)本發(fā)明的實(shí)施例在應(yīng)用程序代碼和固件代碼之間進(jìn)行模式切 換的例子;
[0022] 圖4描繪的是根據(jù)本發(fā)明的實(shí)施例在應(yīng)用程序代碼和固件代碼之間進(jìn)行模式切 換的另一個(gè)例子,其中執(zhí)行用于固件代碼的補(bǔ)丁代碼;
[0023] 圖5是描繪圖1的實(shí)施例的操作模式的序列的狀態(tài)圖;
[0024] 圖6是根據(jù)本發(fā)明的實(shí)施例的系統(tǒng)的存儲(chǔ)器映象,進(jìn)一步描繪了在正常模式和安 全模式中存儲(chǔ)器的可訪(fǎng)問(wèn)性;以及
[0025] 圖7是根據(jù)本發(fā)明的實(shí)施例的方法的流程圖。
【具體實(shí)施方式】
[0026] 除了通常存在于處理系統(tǒng)中的組件(處理器單元或CPU,存儲(chǔ)器以及外圍設(shè)備,這 些組件都通過(guò)通信總線(xiàn)/橋連接起來(lái))之外,本文中提出的實(shí)施例還包括另外的組件:存儲(chǔ) 器訪(fǎng)問(wèn)控制單元(以下簡(jiǎn)稱(chēng)防火墻)。防火墻通過(guò)控制對(duì)固件代碼的訪(fǎng)問(wèn)來(lái)使處理系統(tǒng)不 受到不希望的或未經(jīng)授權(quán)的攻擊。
[0027] 這里,固件代碼應(yīng)當(dāng)被理解為是指永久存儲(chǔ)器以及存儲(chǔ)在其中的程序代碼和數(shù)據(jù) 的組合,諸如BIOS代碼或用于處理系統(tǒng)的核心系統(tǒng)軟件代碼,固件代碼通常由處理系統(tǒng)的 廠商或供應(yīng)商設(shè)置在非易失性存儲(chǔ)器中。固件代碼與應(yīng)用程序代碼的不同之處在于,應(yīng)用 程序代碼通常被設(shè)計(jì)成執(zhí)行固件代碼提供的函數(shù)以及除此之外的高級(jí)函數(shù)或補(bǔ)充函數(shù),應(yīng) 用程序代碼通常是(一般以計(jì)算機(jī)程序的形式)存儲(chǔ)在易失性存儲(chǔ)器上的機(jī)器可讀指令 組,易失性存儲(chǔ)器指示處理器執(zhí)行具體操作。因此,固件代碼通常被永久地存儲(chǔ)在硬件中 (具體是存儲(chǔ)在非易失性存儲(chǔ)器中),而應(yīng)用程序代碼通常被存儲(chǔ)在易失性存儲(chǔ)器或可編 程存儲(chǔ)器中,以便可以對(duì)其進(jìn)行修改。
[0028] 固件代碼被硬件實(shí)現(xiàn)繼承,與它的應(yīng)用程序無(wú)關(guān)。固件代碼支持兩種不同類(lèi)型 的服務(wù):低級(jí)服務(wù)和安全私有功能,其中低級(jí)服務(wù)包括通用接口控制處理和硬件抽象化層 (寄存器控制,功率調(diào)節(jié)等等),安全私有功能包括啟動(dòng)序列,對(duì)最終用戶(hù)提供服務(wù)保護(hù)(例 如訪(fǎng)問(wèn)限制)以及系統(tǒng)管理。通常保護(hù)代碼不受到最終用戶(hù)的攻擊破壞(例如防止對(duì)代碼 進(jìn)行未經(jīng)授權(quán)的修改)。
[0029] 相反,應(yīng)用程序代碼用于處理系統(tǒng)的最終使用,與硬件實(shí)現(xiàn)解決方案無(wú)關(guān)??梢酝?過(guò)復(fù)用低級(jí)函數(shù)(部分固件代碼)來(lái)開(kāi)發(fā)任何應(yīng)用程序代碼。該代碼對(duì)最終用戶(hù)開(kāi)放以提 高適應(yīng)性。
[0030] 當(dāng)使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí),防火墻阻止對(duì)固件代碼的訪(fǎng)問(wèn),以及當(dāng)使能對(duì) 固件代碼的訪(fǎng)問(wèn)時(shí),防火墻阻止對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)。這樣,(例如為了第三方應(yīng)用程序 開(kāi)發(fā))可以執(zhí)行固件代碼而阻止對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)(例如應(yīng)用程序代碼可能是不安全 的和/或可編輯的)。相反,(例如為了第三方應(yīng)用程序開(kāi)發(fā))可以訪(fǎng)問(wèn)應(yīng)用程序代碼而阻 止對(duì)固件代碼的訪(fǎng)問(wèn)。
[0031] 防火墻(或存儲(chǔ)器訪(fǎng)問(wèn)控制單元)控制對(duì)處理系統(tǒng)的存儲(chǔ)器區(qū)域的訪(fǎng)問(wèn)。因此可 以限制處理系統(tǒng)的組件對(duì)存儲(chǔ)器區(qū)域例如ROM的訪(fǎng)問(wèn)。防火墻使能或不使能對(duì)某些存儲(chǔ)器 區(qū)域的訪(fǎng)問(wèn)的決定是受系統(tǒng)的操作模式限制的。例如,在特定實(shí)施例中,防火墻可以適用于 基于代碼是否是固件代碼或應(yīng)用程序代碼的一部分來(lái)允許或拒絕從存儲(chǔ)器的某些區(qū)域獲 取代碼。因此,可以限制處理器單元僅訪(fǎng)問(wèn)存儲(chǔ)器的被識(shí)別為是安全的區(qū)域(例如用于存 儲(chǔ)固件代碼的非易失性存儲(chǔ)器區(qū)域),阻止訪(fǎng)問(wèn)存儲(chǔ)器的被識(shí)別為是不安全的一個(gè)或多個(gè) 其他區(qū)域??梢宰柚固幚砥鲉卧瑫r(shí)訪(fǎng)問(wèn)存儲(chǔ)器的安全區(qū)域(例如非易失性區(qū)域)和不安 全區(qū)域(例如易失性區(qū)域)。
[0032] 圖1是根據(jù)本發(fā)明的實(shí)施例的處理系統(tǒng)100的示意性框圖。該處理系統(tǒng)100包括 (具有調(diào)試接口 103的)處理器單元或CPU102,其通過(guò)存儲(chǔ)器訪(fǎng)問(wèn)控制單元或防火墻105 連接到通信總線(xiàn)104。這里,CPU102的調(diào)試接口 103是調(diào)試JTAG接口 103,其連接到調(diào)試 探測(cè)器103a以使用戶(hù)能夠檢查和調(diào)試代碼。然而在其他實(shí)施例中,調(diào)試接口 103可以包括 串行線(xiàn)調(diào)試(SWD :Serial Wire debug)。SWD為嚴(yán)格限制引腳的封裝提供調(diào)試端口,經(jīng)常的 情況是為小封裝微處理器(也可以是引腳數(shù)限制至關(guān)重要的復(fù)雜的ASIC),這在設(shè)備成本 方面是控制因素。
[0033] 另外,易失性存儲(chǔ)單元106和非易失性存儲(chǔ)單元108、外圍設(shè)備110 (諸如接口,協(xié) 處理器)以及復(fù)位/電源管理單元112也連接到通信總線(xiàn)104。
[0034] 這里,非易失性存儲(chǔ)器單元108包括ROM單元108,其中存儲(chǔ)有:用于啟動(dòng)/初始 化系統(tǒng)100的固件啟動(dòng)代碼序列;在第三方應(yīng)用程序執(zhí)行期間受保護(hù)的安全固件代碼;起 源于廠商內(nèi)部固件的服務(wù)執(zhí)行;以及調(diào)度函數(shù)代碼,用于從用戶(hù)應(yīng)用程序執(zhí)行模式切換到 固件執(zhí)行模式。
[0035] 易失性存儲(chǔ)器106包括隨機(jī)訪(fǎng)問(wèn)存儲(chǔ)器(RAM)單元106a和諸如閃存或EEPR0M的 可編程存儲(chǔ)器l〇6b。RAM單元106a用于存儲(chǔ)在啟動(dòng)代碼執(zhí)行期間或應(yīng)用程序代碼執(zhí)行期 間由CPU102所使用的數(shù)據(jù)??删幊檀鎯?chǔ)器106b適用于存儲(chǔ)來(lái)自第三方開(kāi)發(fā)者的應(yīng)用程序 代碼(例如用于系統(tǒng)的最終應(yīng)用的程序代碼);另外的安全固件代碼;和/或?qū)Π踩碳?代碼在ROM單元108中提供保護(hù)的補(bǔ)丁代碼??删幊檀鎯?chǔ)器106b還可以存儲(chǔ)調(diào)度函數(shù)代 碼(如果調(diào)度函數(shù)代碼不位于ROM單元108中/不從ROM單元108來(lái)獲得調(diào)度函數(shù)代碼的 話(huà))。
[0036] 因此,應(yīng)當(dāng)理解的是,不像常規(guī)的處理系統(tǒng),圖1的系統(tǒng)100還包括存儲(chǔ)器訪(fǎng)問(wèn)控 制單元或防火墻105。防火墻105 (至少)能夠從處理器102接收代碼訪(fǎng)問(wèn)請(qǐng)求,以及控制 處理器102對(duì)系統(tǒng)存儲(chǔ)器區(qū)域的訪(fǎng)問(wèn)。因此,例如,防火墻105可以被連接在處理器102和 通信總線(xiàn)104之間。
[0037] 防火墻105適用于管理不同的系統(tǒng)模式以執(zhí)行固件保護(hù)。在默認(rèn)情況下,在調(diào)試 接口 103被鎖定并且不能使用期間,系統(tǒng)在"系統(tǒng)模式"啟動(dòng)。
[0038] -旦啟動(dòng)過(guò)程已經(jīng)完成,固件將指示防火墻105進(jìn)入正常模式。當(dāng)處于正常模式 時(shí),可以執(zhí)行位于可編程存儲(chǔ)器l〇6b中的第三方開(kāi)發(fā)者的應(yīng)用程序代碼,并阻止對(duì)ROM單 元108中的固件代碼的訪(fǎng)問(wèn)。當(dāng)應(yīng)用程序代碼調(diào)用位于ROM單元108中的安全固件代碼中 定義的函數(shù)時(shí),防火墻105使系統(tǒng)進(jìn)入安全模式。當(dāng)處于安全模式時(shí),可以執(zhí)行位于ROM單 元108中的固件代碼,并且阻止對(duì)可編程存儲(chǔ)器106b中的應(yīng)用程序代碼的訪(fǎng)問(wèn)。
[0039] 因此,取決于系統(tǒng)所處的操作模式,防火墻105適用于控制對(duì)系統(tǒng)100的存儲(chǔ)器 106、108的訪(fǎng)問(wèn)?;谑欠裾趫?zhí)行第三方應(yīng)用程序代碼或固件代碼,防火墻105判斷是否 準(zhǔn)許或拒絕對(duì)某些存儲(chǔ)器區(qū)域的訪(fǎng)問(wèn)。例如,防火墻105阻止對(duì)固件代碼和第三方應(yīng)用程 序代碼的同時(shí)訪(fǎng)問(wèn)。
[0040] 現(xiàn)在參考圖2來(lái)更加詳細(xì)地描述圖1的防火墻105的示范性操作。
[0041] 防火墻105包括地址/數(shù)據(jù)總線(xiàn)解析器115,多個(gè)寄存器1201-120n,以及狀態(tài)控 制器125,其中每個(gè)寄存器適用于存儲(chǔ)接入點(diǎn)地址。地址/數(shù)據(jù)總線(xiàn)解析器115截獲來(lái)自 CPU102的指令,并利用地址比較器來(lái)比較指令的地址請(qǐng)求和包含在寄存器120中的接入點(diǎn) 地址。
[0042] 在位于可編程存儲(chǔ)器106b中的應(yīng)用程序代碼執(zhí)行期間,防火墻105允許應(yīng)用程序 代碼通過(guò)單個(gè)接入點(diǎn)調(diào)用位于ROM單元108中的固件代碼。用于調(diào)用固件代碼的接入點(diǎn) 被定義在防火墻105的寄存器120中。注意,在應(yīng)用程序代碼執(zhí)行期間(即在正常模式期 間),防火墻105的寄存器120是不能被處理器102訪(fǎng)問(wèn)的。
[0043] 對(duì)于來(lái)自處理器102的每個(gè)新的總線(xiàn)訪(fǎng)問(wèn),防火墻105都檢查寄存器120中的接 入點(diǎn)地址,以判斷該接入點(diǎn)地址是否等于處理器102所要求的地址。如果所要求的地址與 接入點(diǎn)地址相匹配,則判斷應(yīng)用程序代碼正在調(diào)用固件代碼,因此防火墻105不使能對(duì)可 編程存儲(chǔ)器106的任何其他訪(fǎng)問(wèn)并且不使能調(diào)試接口 103。換句話(huà)說(shuō),如果判斷應(yīng)用程序代 碼正在調(diào)用固件代碼,則防火墻使系統(tǒng)進(jìn)入安全模式,在安全模式中,能夠訪(fǎng)問(wèn)或執(zhí)行位于 ROM單元108中的固件代碼,不使能調(diào)試接口 103和對(duì)可編程存儲(chǔ)器106b的訪(fǎng)問(wèn)。
[0044] 從這一點(diǎn)來(lái)看(即當(dāng)處于安全模式時(shí)),能夠以高安全級(jí)別執(zhí)行ROM單元108中的 固件代碼,因?yàn)閷?duì)可編程存儲(chǔ)器l〇6b的訪(fǎng)問(wèn)是不使能的并且調(diào)試接口是被鎖定的。還要注 意,在此期間,允許安全固件代碼訪(fǎng)問(wèn)防火墻寄存器120。另外,如果系統(tǒng)100在可編程存儲(chǔ) 器106b中包含一些安全固件代碼,則防火墻105使能這些安全固件代碼的執(zhí)行。這例如可 以被用于執(zhí)行固件代碼的補(bǔ)丁。
[0045] 在安全固件代碼的執(zhí)行結(jié)束時(shí)(例如當(dāng)防火墻105檢測(cè)到返回過(guò)程時(shí)),防火墻 105使系統(tǒng)重新進(jìn)入正常模式(在正常模式中,不使能對(duì)固件代碼的訪(fǎng)問(wèn),使能對(duì)可編程存 儲(chǔ)器106b中的應(yīng)用程序代碼的訪(fǎng)問(wèn),并且使能調(diào)試接口 103)。注意,只有當(dāng)安全固件代碼 清除防火墻105的寄存器120中的一位時(shí)才可以再使能對(duì)可編程存儲(chǔ)器106b的訪(fǎng)問(wèn),以允 許切換回到正常模式。對(duì)于防火墻105檢測(cè)到返回過(guò)程而沒(méi)有清除防火墻105的寄存器 120中的這一位的情況,出于安全目的,防火墻105將自動(dòng)復(fù)位處理器102和RAM106a。此 夕卜,如果應(yīng)用程序代碼試圖調(diào)用R0M108內(nèi)的固件代碼的地址,其中該地址不是靜態(tài)接入點(diǎn) 地址,則防火墻105復(fù)位處理器102和RAM106a,以阻止對(duì)安全固件的非法訪(fǎng)問(wèn)。
[0046] 取決于實(shí)施例,可以采用集中式實(shí)現(xiàn)方式或分布式實(shí)現(xiàn)方式來(lái)實(shí)現(xiàn)防火墻 105 (或存儲(chǔ)器訪(fǎng)問(wèn)控制單元)。在集中式實(shí)現(xiàn)方式中,由一個(gè)設(shè)備來(lái)執(zhí)行防火墻105的功 能并管理所有存儲(chǔ)器。在分布式實(shí)現(xiàn)方式中,每個(gè)存儲(chǔ)器類(lèi)型可以具有自己的設(shè)備來(lái)執(zhí)行 僅用于特定存儲(chǔ)器的防火墻105的部分功能。
[0047] 基于實(shí)施例,可以將防火墻105實(shí)現(xiàn)為處理器(平臺(tái))的現(xiàn)有組件的一部分,現(xiàn)有 組件諸如是存儲(chǔ)器管理單元,存儲(chǔ)器保護(hù)單元,地址解碼器,存儲(chǔ)器接口(在分布式實(shí)現(xiàn)的 情況中),或者可以將其實(shí)現(xiàn)為獨(dú)立的設(shè)備。
[0048] 防火墻105還可以阻止處理單元(CPU) 102以多種不同的方式執(zhí)行命令。例如,它 可以產(chǎn)生存儲(chǔ)器錯(cuò)誤,觸發(fā)中斷,提供不可執(zhí)行指令,返回?zé)o操作指令,或上述各項(xiàng)的組合。
[0049] 現(xiàn)在參考圖3描述在應(yīng)用程序代碼和固件代碼之間進(jìn)行模式切換的例子。
[0050] 如上面參考圖2已經(jīng)描述的,防火墻105對(duì)安全固件代碼提供單個(gè)接入點(diǎn)。這個(gè) 接入點(diǎn)位于預(yù)定的固定地址,該地址與調(diào)度函數(shù)的地址對(duì)應(yīng)。一個(gè)或多個(gè)參數(shù)被提供給調(diào) 度函數(shù),以定義執(zhí)行安全固件代碼的哪個(gè)函數(shù)。
[0051] 當(dāng)調(diào)度函數(shù)被調(diào)用時(shí)(即當(dāng)預(yù)定的固定地址被請(qǐng)求時(shí)),防火墻105通過(guò)使能對(duì)安 全固件代碼的訪(fǎng)問(wèn)以及不使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng)從正常模式切換 到安全模式(步驟#1)。
[0052] 然后執(zhí)行ROM中的調(diào)度函數(shù),并基于被提供給調(diào)度函數(shù)的參數(shù)來(lái)執(zhí)行安全固件的 函數(shù)(步驟#2)。這里,所提供的參數(shù)是R0 = Funcl_addr,該參數(shù)請(qǐng)求安全固件的第一函 數(shù) Funcl ()。
[0053] 在執(zhí)行安全固件代碼的函數(shù)之后,(通過(guò)像正常返回函數(shù)那樣處理)離開(kāi)調(diào)度函 數(shù)并返回到應(yīng)用程序代碼。當(dāng)返回到應(yīng)用程序代碼時(shí),防火墻105通過(guò)不使能對(duì)安全固件 的訪(fǎng)問(wèn)以及使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng)從安全模式切換到正常模式 (步驟# 3)。
[0054] 然后繼續(xù)執(zhí)行應(yīng)用程序代碼,直到調(diào)度函數(shù)被再次調(diào)用。當(dāng)再次調(diào)用調(diào)度函數(shù)時(shí), 防火墻105通過(guò)使能對(duì)安全固件的訪(fǎng)問(wèn)并且不使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將 系統(tǒng)從正常模式切換到安全模式(步驟#4)。
[0055] 然后執(zhí)行ROM中的調(diào)度函數(shù),并基于被提供給調(diào)度函數(shù)的參數(shù)來(lái)執(zhí)行安全固件的 函數(shù)(步驟#5)。這里,用于對(duì)調(diào)度函數(shù)進(jìn)行第二次調(diào)用的參數(shù)是R0 = FunC3_addr,該參 數(shù)請(qǐng)求安全固件的第三函數(shù)Func3 ()。
[0056] 在執(zhí)行安全固件的函數(shù)之后,(通過(guò)像正常返回函數(shù)那樣處理)離開(kāi)調(diào)度函數(shù)并 返回到應(yīng)用程序代碼。當(dāng)返回到應(yīng)用程序代碼時(shí),防火墻105通過(guò)不使能對(duì)安全固件的訪(fǎng) 問(wèn)以及使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng)從安全模式切換到正常模式(步驟 #6)。
[0057] 對(duì)于一些安全固件還位于可編程存儲(chǔ)器中的實(shí)施例,還可以使調(diào)度函數(shù)位于可編 程存儲(chǔ)器中。
[0058] 實(shí)施例還可以執(zhí)行用于安全固件代碼的補(bǔ)丁代碼。補(bǔ)丁代碼可以位于可編程存儲(chǔ) 器的安全區(qū)域中,并且可以在需要更正安全固件代碼的執(zhí)行時(shí)使用補(bǔ)丁代碼。
[0059] 圖4描繪的是在應(yīng)用程序代碼和固件代碼之間進(jìn)行模式切換的例子,其中固件代 碼利用可編程存儲(chǔ)器的區(qū)域中的補(bǔ)丁代碼。
[0060] 當(dāng)執(zhí)行應(yīng)用程序代碼并調(diào)用調(diào)度函數(shù)時(shí)(即當(dāng)預(yù)定的固定地址被請(qǐng)求時(shí)),防火 墻105通過(guò)使能對(duì)安全固件的訪(fǎng)問(wèn)以及不使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng) 從正常模式切換到安全模式(步驟#01)。
[0061] 然后執(zhí)行ROM中的調(diào)度函數(shù),并基于被提供給調(diào)度函數(shù)的參數(shù)來(lái)執(zhí)行安全固件的 函數(shù)(步驟#02)。這里,被提供的參數(shù)是R0 = Funcl_addr,該參數(shù)請(qǐng)求安全固件的第一函 數(shù) Funcl ()。
[0062] 當(dāng)執(zhí)行安全固件的函數(shù)Funcl ()時(shí),請(qǐng)求執(zhí)行補(bǔ)丁代碼,因此調(diào)用并執(zhí)行補(bǔ)丁代 碼(步驟#03)。
[0063] 在執(zhí)行安全固件的函數(shù)Funcl ()之后,(通過(guò)像正常返回函數(shù)那樣處理)離開(kāi)調(diào) 度函數(shù)并返回到應(yīng)用程序代碼。當(dāng)返回到應(yīng)用程序代碼時(shí),防火墻105通過(guò)不使能對(duì)安全 固件的訪(fǎng)問(wèn)以及使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng)從安全模式切換到正常模 式(步驟#04)。
[0064] 然后繼續(xù)執(zhí)行應(yīng)用程序代碼,直到調(diào)度函數(shù)被再次調(diào)用。當(dāng)再次調(diào)用調(diào)度函數(shù)時(shí), 防火墻105通過(guò)使能對(duì)安全固件的訪(fǎng)問(wèn)以及不使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將 系統(tǒng)從正常模式切換到安全模式(步驟#05)。
[0065] 然后執(zhí)行ROM中的調(diào)度函數(shù),并基于被提供給調(diào)度函數(shù)的參數(shù)來(lái)執(zhí)行安全固件的 函數(shù)(步驟#05)。這里,用于對(duì)調(diào)度函數(shù)進(jìn)行第二次調(diào)用的參數(shù)是R0 = FunC3_addr,該參 數(shù)請(qǐng)求安全固件的第三函數(shù)Func3 ()。
[0066] 在執(zhí)行安全固件的函數(shù)之后,(通過(guò)像正常返回函數(shù)那樣處理)離開(kāi)調(diào)度函數(shù)并 返回到應(yīng)用程序代碼。當(dāng)返回到應(yīng)用程序代碼時(shí),防火墻105通過(guò)不使能對(duì)安全固件的訪(fǎng) 問(wèn)以及使能對(duì)應(yīng)用程序代碼和調(diào)試接口的訪(fǎng)問(wèn),將系統(tǒng)從安全模式切換到正常模式(步驟 #07)。
[0067] 調(diào)度代碼執(zhí)行的例子:
[0068] 調(diào)度函數(shù)位于ROM單元108中唯一的接入點(diǎn)的地址處。調(diào)度函數(shù)接受最多4個(gè)參 數(shù)。根據(jù)內(nèi)部服務(wù)定義,第一參數(shù)是輸入?yún)?shù),其他三個(gè)參數(shù)可以是輸入或輸出參數(shù),或輸 入和輸出參數(shù)。
[0069] 第一參數(shù)是服務(wù)標(biāo)識(shí)符,其值大于0且小于(或等于)系統(tǒng)中可以得到的服務(wù)的 數(shù)目。因此,第一參數(shù)是要被調(diào)用的服務(wù)的索引。任何其他的值會(huì)引起系統(tǒng)錯(cuò)誤并觸發(fā)復(fù) 位。
[0070] 三個(gè)其他的參數(shù)被傳輸?shù)奖徽{(diào)用的服務(wù)。根據(jù)每個(gè)服務(wù)以及它們使用這些參數(shù)的 方式,可以作為參考來(lái)讀、寫(xiě)、使用這些參數(shù),或簡(jiǎn)單地不忽視這些參數(shù)。由每個(gè)服務(wù)根據(jù)它 的目的來(lái)檢查參數(shù)值的一致性。預(yù)料之外的值會(huì)引起系統(tǒng)錯(cuò)誤并觸發(fā)系統(tǒng)復(fù)位。
[0071] 根據(jù)實(shí)施例用于調(diào)度函數(shù)的偽代碼的例子如下:
[0072] Func Dispatch(paraml, param2, param35 param4) { if (paraini == #1) call function#!(param2, param3, param4) else if (paraml == #2) call function#2(param25 param3? param4) else ii'(pcirainl == #3 ) aill iunclion#3(parani2, param3, parain4) else if (paraml == #N) call fimction#N(param2, param3, param4) elsesyslem_iiiult(system_reser): firewall_switch_to_normal_mode; }
[0073] 調(diào)度函數(shù)的最后一個(gè)操作是使能防火墻將系統(tǒng)切換回正常模式。
[0074] 圖5描繪的是圖1的實(shí)施例的操作模式的狀態(tài)圖。圖中顯示有四種操作模式:上 電復(fù)位模式1〇〇 ;系統(tǒng)模式200 ;正常模式300 ;以及安全模式400。
[0075] 上電復(fù)位模式100實(shí)現(xiàn)電路電源初始化,然后進(jìn)行到系統(tǒng)模式200。在系統(tǒng)模式 200中,隨著不使能CPU102的調(diào)試接口并且執(zhí)行安全固件以啟動(dòng)系統(tǒng),103接收電路啟動(dòng)序 列。在系統(tǒng)模式200的電路啟動(dòng)序列完成之后,系統(tǒng)進(jìn)行到正常模式300。
[0076] 在正常模式300中,執(zhí)行可編程存儲(chǔ)器中的應(yīng)用程序代碼,同時(shí)防火墻105不使能 對(duì)安全固件的訪(fǎng)問(wèn)。此外,使能CPU102的調(diào)試接口 103以允許調(diào)試應(yīng)用程序代碼。
[0077] 當(dāng)(例如通過(guò)請(qǐng)求存儲(chǔ)在防火墻的寄存器中的預(yù)定的單個(gè)接入點(diǎn)的地址)調(diào)用固 件代碼時(shí),防火墻105使系統(tǒng)處于安全模式400。在安全模式400中,執(zhí)行所請(qǐng)求的固件代 碼,同時(shí)防火墻105不使能對(duì)可編程存儲(chǔ)器中的應(yīng)用程序代碼的訪(fǎng)問(wèn)。此外,在安全模式 400中不使能CPU102的調(diào)試接口 103。
[0078] -旦固件的執(zhí)行已經(jīng)在安全模式400完成,則系統(tǒng)返回到正常模式300。
[0079] 圖6是根據(jù)本發(fā)明的實(shí)施例的系統(tǒng)的存儲(chǔ)器映象。該圖描繪了在正常模式和安全 模式中系統(tǒng)的存儲(chǔ)器各區(qū)域的可訪(fǎng)問(wèn)性。應(yīng)當(dāng)理解的是,在正常模式300期間(例如當(dāng)?shù)?三方應(yīng)用程序代碼執(zhí)行時(shí)),防火墻的寄存器、可編程存儲(chǔ)器中的安全區(qū)域以及ROM是不能 訪(fǎng)問(wèn)的。
[0080] 圖7是根據(jù)本發(fā)明的實(shí)施例的方法的流程圖。該方法用于控制處理系統(tǒng)的處理單 元對(duì)處理系統(tǒng)的存儲(chǔ)器存儲(chǔ)的固件代碼和應(yīng)用程序代碼的訪(fǎng)問(wèn)。
[0081] 該方法開(kāi)始于步驟302,在該步驟中,系統(tǒng)處于正常模式,其中防火墻不使能對(duì)固 件代碼的訪(fǎng)問(wèn)以及使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)。接下來(lái),在步驟304中,執(zhí)行應(yīng)用程序代 碼,然后該方法進(jìn)行到步驟306,在步驟306中,判斷是否所執(zhí)行的應(yīng)用程序代碼正在調(diào)用 固件代碼(例如固件函數(shù))。如果判斷所執(zhí)行的應(yīng)用程序代碼不在調(diào)用固件代碼,則該方法 返回到步驟302。然而,如果在步驟306中判斷所執(zhí)行的應(yīng)用程序代碼正在調(diào)用固件代碼, 則該方法進(jìn)行到步驟308。
[0082] 在步驟308中,系統(tǒng)在安全模式中操作,其中防火墻使能對(duì)固件代碼的訪(fǎng)問(wèn)以及 不使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)。接下來(lái),在步驟310中,執(zhí)行被調(diào)用的固件代碼,一旦固件 代碼的執(zhí)行完成,該方法就返回到步驟302,在步驟302中,系統(tǒng)再次在正常模式中操作。 [0083] 可以在計(jì)算機(jī)程序產(chǎn)品中獲得實(shí)施例,計(jì)算機(jī)程序產(chǎn)品用于在計(jì)算機(jī)的處理器上 執(zhí)行,計(jì)算機(jī)例如是個(gè)人計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器,如果計(jì)算機(jī)程序產(chǎn)品在計(jì)算機(jī)上執(zhí)行,會(huì)使 計(jì)算機(jī)執(zhí)行根據(jù)實(shí)施例的方法的各個(gè)步驟。由于這些步驟在計(jì)算機(jī)程序產(chǎn)品中的執(zhí)行僅需 要本領(lǐng)域技術(shù)人員的常規(guī)技能,因此在本文中出于文本簡(jiǎn)潔的原因,就不對(duì)這樣執(zhí)行的內(nèi) 容作更詳細(xì)的描述了。
[0084] 在實(shí)施例中,計(jì)算機(jī)程序產(chǎn)品被存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上。任何合適的計(jì)算機(jī)可 讀介質(zhì)都是可以使用的,例如⑶-ROM、DVD、USB棒、存儲(chǔ)卡、網(wǎng)絡(luò)區(qū)域存儲(chǔ)設(shè)備、因特網(wǎng)可訪(fǎng) 問(wèn)的數(shù)據(jù)存儲(chǔ)器等。
[0085] 基于本文中的附圖、公開(kāi)的內(nèi)容以及所附的權(quán)利要求,本領(lǐng)域技術(shù)人員在實(shí)施本 發(fā)明時(shí)可以想到本文中所公開(kāi)的實(shí)施例的其他變形例。本文中所使用的"包括"并不排除 其他組成部分或步驟,本文中的"一"或"一個(gè)"并不排除多個(gè)。單個(gè)處理器或其他單元可 以完成本文的權(quán)利要求中所述的各個(gè)部件的功能。事實(shí)是,某些措施在相互不同的從屬權(quán) 利要求中被敘述并不表示這些措施的組合不能被有利地使用。計(jì)算機(jī)程序可以存儲(chǔ)/分布 在合適的介質(zhì)上,諸如光存儲(chǔ)介質(zhì)或固態(tài)存儲(chǔ)介質(zhì)以及部分其他硬件,但是也可以以其他 形式分布,諸如經(jīng)由因特網(wǎng)其他有線(xiàn)或無(wú)線(xiàn)遠(yuǎn)程通信系統(tǒng)。權(quán)利要求中出現(xiàn)的參考標(biāo)號(hào)并 不用來(lái)限制保護(hù)范圍。
【權(quán)利要求】
1. 一種處理系統(tǒng),其特征在于,包括: 處理單元; 存儲(chǔ)器,適用于存儲(chǔ)用于處理器執(zhí)行的固件代碼和應(yīng)用程序代碼;以及 存儲(chǔ)器訪(fǎng)問(wèn)控制單元,適用于控制處理單元對(duì)存儲(chǔ)在存儲(chǔ)器中的固件代碼和應(yīng)用程序 代碼的訪(fǎng)問(wèn), 其中存儲(chǔ)器訪(fǎng)問(wèn)控制單元適用于,當(dāng)使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí)不使能對(duì)固件代碼 的訪(fǎng)問(wèn),以及當(dāng)不使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí)使能對(duì)固件代碼的訪(fǎng)問(wèn)。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括調(diào)試接口,調(diào)試接口用于使能對(duì)存儲(chǔ) 器存儲(chǔ)的應(yīng)用程序代碼的調(diào)試,以及其中存儲(chǔ)器訪(fǎng)問(wèn)控制單元適用于不使能調(diào)試接口,以 便當(dāng)使能對(duì)固件代碼的訪(fǎng)問(wèn)時(shí)不能進(jìn)行調(diào)試。
3. 如權(quán)利要求1或2所述的系統(tǒng),其特征在于,存儲(chǔ)器包括適用于存儲(chǔ)固件代碼的非易 失性存儲(chǔ)器和適用于存儲(chǔ)應(yīng)用程序代碼的易失性存儲(chǔ)器。
4. 如在前的任意一項(xiàng)權(quán)利要求所述的系統(tǒng),其特征在于,存儲(chǔ)器訪(fǎng)問(wèn)控制單元被連接 在處理器和存儲(chǔ)器之間,其中存儲(chǔ)器訪(fǎng)問(wèn)控制單元還適用于截獲來(lái)自處理器的存儲(chǔ)器訪(fǎng)問(wèn) 請(qǐng)求,并基于截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求來(lái)控制對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)。
5. 如權(quán)利要求4所述的系統(tǒng),其特征在于,存儲(chǔ)器訪(fǎng)問(wèn)控制單元包括寄存器,寄存器適 用于存儲(chǔ)表示固件代碼在存儲(chǔ)器中的位置的地址,以及其中存儲(chǔ)器訪(fǎng)問(wèn)控制單元還適用于 判斷是否截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求是請(qǐng)求訪(fǎng)問(wèn)存儲(chǔ)在寄存器中的地址,并基于判斷結(jié)果來(lái)控 制對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)。
6. 如權(quán)利要求4或5所述的系統(tǒng),其特征在于,存儲(chǔ)器訪(fǎng)問(wèn)控制單元還適用于,當(dāng)使能 對(duì)固件代碼的訪(fǎng)問(wèn)時(shí),使能對(duì)寄存器的訪(fǎng)問(wèn),以及當(dāng)使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí),不使能 對(duì)寄存器的訪(fǎng)問(wèn)。
7. 如在前的任意一項(xiàng)權(quán)利要求所述的系統(tǒng),其特征在于,至少部分存儲(chǔ)器訪(fǎng)問(wèn)控制單 元在只讀存儲(chǔ)器中實(shí)現(xiàn)。
8. -種微處理器,其特征在于,包括如在前的任意一項(xiàng)權(quán)利要求所述的處理系統(tǒng)。
9. 一種片上系統(tǒng)應(yīng)用程序開(kāi)發(fā)系統(tǒng),其特征在于,包括根據(jù)權(quán)利要求1-7中任一項(xiàng)所 述的處理系統(tǒng)。
10. -種用于控制處理系統(tǒng)的處理單元對(duì)處理系統(tǒng)的存儲(chǔ)器存儲(chǔ)的固件代碼和應(yīng)用程 序代碼的訪(fǎng)問(wèn)的方法,其特征在于,該方法包括以下步驟: 當(dāng)使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)時(shí),不使能對(duì)固件代碼的訪(fǎng)問(wèn);以及 當(dāng)使能對(duì)固件代碼的訪(fǎng)問(wèn)時(shí),不使能對(duì)應(yīng)用程序代碼的訪(fǎng)問(wèn)。
11. 根據(jù)權(quán)利要求10所述的方法,其特征在于,還包括不使能調(diào)試接口的步驟,以便當(dāng) 使能對(duì)固件代碼的訪(fǎng)問(wèn)時(shí)不能進(jìn)行調(diào)試。
12. 如權(quán)利要求10或11所述的方法,其特征在于,還包括以下步驟; 截獲來(lái)自處理器的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求;以及 基于截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求來(lái)控制對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)。
13. 如權(quán)利要求12所述的方法,其特征在于,基于截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求來(lái)控制對(duì)存 儲(chǔ)器的訪(fǎng)問(wèn)的步驟包括: 判斷是否截獲的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求是請(qǐng)求訪(fǎng)問(wèn)預(yù)定地址;以及
【文檔編號(hào)】G06F21/12GK104217139SQ201410200577
【公開(kāi)日】2014年12月17日 申請(qǐng)日期:2014年5月13日 優(yōu)先權(quán)日:2013年5月29日
【發(fā)明者】尼古拉斯·萊娜, 安德烈·勒平 申請(qǐng)人:Nxp股份有限公司