專利名稱:嵌入式系統(tǒng)中寫保護的控制方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng)領(lǐng)域,具體而言,涉及一種嵌入式系統(tǒng)中寫保護的控制方法和裝置。
背景技術(shù):
在當(dāng)前的嵌入式系統(tǒng)設(shè)備中,廣泛的使用了嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)接管了嵌入式系統(tǒng)設(shè)備中的絕大部分硬件資源管理,包括通過CPU數(shù)據(jù)地址總線訪問外部設(shè)備的物理地址空間,將外設(shè)的讀、寫、控制操作封裝成幾種固定的API(應(yīng)用程序接口)提供給開發(fā)人員,如read (讀取),wnte (寫入),ioctrl (輸入輸出控制)等驅(qū)動接口函數(shù)。這種方式給開發(fā)人員帶來了很多便利,不需要關(guān)心硬件底層的實現(xiàn)細節(jié),加快了開發(fā)速度,但是也帶來了一些硬件控制上的隱患,比如低效率、不安全和不靈活。下面將會逐一舉例說明。在一些應(yīng)用場景中,嵌入式系統(tǒng)需要對某一段地址空間內(nèi)容進行寫保護,只能進行讀取數(shù)據(jù)操作而不允許進行寫入數(shù)據(jù)操作,如存儲嵌入式系統(tǒng)啟動程序或重要數(shù)據(jù)的 FLASH(閃存),EEPR0M(電可擦可編程只讀存儲器)等,是禁止非法寫入的;某些上位機和下位機通訊過程中,下位機準備就緒之前是禁止上位機進行寫入數(shù)據(jù)操作的。在使用了操作系統(tǒng)的嵌入式系統(tǒng)中,這種寫保護通常是通過軟件來實現(xiàn)的,普遍做法是使用操作系統(tǒng)提供的信號量或者互斥量進行保護。如圖1所示,這種使用操作系統(tǒng)提供API來保護數(shù)據(jù)區(qū)域的方法包括如下步驟S101,創(chuàng)建信號量(semaphore)用來保護一段數(shù)據(jù)區(qū)域,如在嵌入式操作系統(tǒng) pSOSystem中,使用系統(tǒng)調(diào)用sm_create來創(chuàng)建信號量“WPSM” ;S102,在對數(shù)據(jù)區(qū)域進行寫入操作前,先對“WPSM”信號量進行P操作,如 pSOSystem中的系統(tǒng)調(diào)用sm_p ;S103,提前對“WPSM”信號量進行P操作,即可實現(xiàn)數(shù)據(jù)區(qū)域的寫保護,后續(xù)寫入動作的P操作將會失?。籗104,對“WPSM”信號量進行V操作,如pSOSystem中的系統(tǒng)調(diào)用sm_v,即可解除數(shù)據(jù)區(qū)域的寫保護,后續(xù)寫入動作對“WPSM”的P操作成功,可以寫入。然而,用這種方式實現(xiàn)的數(shù)據(jù)區(qū)域?qū)懕Wo方法,存在實時性不高(軟實時),效率低(無法一次保護整段連續(xù)的物理地址空間)的特點。同時這種寫保護方式安全性差,因為始終存在繞過操作系統(tǒng)提供API直接寫入數(shù)據(jù)的可能,如CIH病毒繞過WINDOWS操作系統(tǒng)直接寫入主板BIOS(基本輸入輸出系統(tǒng))導(dǎo)致微機無法啟動,或是CPU掉電時的數(shù)據(jù)地址總線的隨機狀態(tài)產(chǎn)生寫入非法數(shù)據(jù)操作。此外,如果不使用操作系統(tǒng)提供的軟件接口,這種寫保護也可以通過硬件來實現(xiàn), 普遍做法是通過機械開關(guān)、硬件跳線或邏輯寄存器來設(shè)置寫保護狀態(tài),外帶硬件寫保護電路,通過判斷寫保護狀態(tài)來打開或關(guān)閉寫保護功能。用這種方式實現(xiàn)的數(shù)據(jù)區(qū)域?qū)懕Wo方法,存在成本高(需要額外硬件電路或邏輯資源),不靈活(需要外界設(shè)置干預(yù))的特點。如帶寫保護開關(guān)的U盤,需要增加開關(guān)和內(nèi)部電路,增加了成本,并且要用戶手動撥才能實現(xiàn)打開或禁止寫入數(shù)據(jù)的效果。如果數(shù)據(jù)存儲在某種具備寫保護功能的存儲介質(zhì)上如FLASH,EEPROM等,可以使用存儲介質(zhì)自帶的寫保護功能,如圖2所示,使用帶寫保護功能存儲介質(zhì)來保護數(shù)據(jù)區(qū)域的裝置包括外部控制接口 201 ;寫保護開關(guān)202,用于控制寫保護電路的工作狀態(tài);寫保護電路203,用于根據(jù)開關(guān)狀態(tài)控制寫入使能信號;帶寫保護功能的存儲介質(zhì)204。但是如果數(shù)據(jù)位于自身不帶寫保護功能的存儲介質(zhì)如SRAM(靜態(tài)隨機存取存儲器)、SDRAM(同步動態(tài)隨機存取存儲器)或DPRAM(雙端口隨機存儲器)等,或下位機如單片機、MCU(微控制器),DSP(數(shù)字信號處理器)等,就無法使用這種方式進行數(shù)據(jù)寫保護, 因此,這種設(shè)計方案具有較大的局限性。此外,現(xiàn)有技術(shù)中還可以使用CPU的MMU保護數(shù)據(jù)區(qū)域,其流程圖如圖3所示,包括如下步驟S301,將需要寫保護數(shù)據(jù)區(qū)域定義為一個特殊的MMU(內(nèi)存管理單元)內(nèi)存頁面;S302,設(shè)定要進行寫保護控制的內(nèi)存頁其MMU數(shù)據(jù)存取權(quán)限為只讀不可寫,則寫保護控制生效;S303,當(dāng)有程序指令寫入到設(shè)置寫保護的頁時,將進入MMU異常中斷,產(chǎn)生數(shù)據(jù)存取違背權(quán)限的異常;S304,在異常處理程序中進行處理,按該指令正常讀寫內(nèi)存處理,完成后退出異常處理程序,返回中斷點;S305,設(shè)置被寫保護控制的內(nèi)存頁其MMU數(shù)據(jù)存取權(quán)限為可讀寫,則撤銷寫保護控制。然而,現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種嵌入式系統(tǒng)中寫保護的控制方法,以至少解決現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低的問題。根據(jù)本發(fā)明的一個方面,提供了一種嵌入式系統(tǒng)中寫保護的控制方法,其包括獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,非法寫入地址被預(yù)先設(shè)置為寫保護;將非法寫入地址修改為允許寫入的區(qū)域的地址;對允許寫入的區(qū)域的地址執(zhí)行寫指令的操作。在獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址之前,嵌入式系統(tǒng)中寫保護的控制方法還包括檢測到出現(xiàn)CPU總線異常中斷;通過內(nèi)存狀態(tài)寄存器中的標(biāo)志位來判斷引起CPU總線異常中斷的寫指令所要寫入的寫入地址是否屬于被寫保護的數(shù)據(jù)區(qū)域;若屬于,則判斷出引起CPU總線異常中斷的寫指令所要寫入的寫入地址為非法寫入地址,并執(zhí)行獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址的步驟。將非法寫入地址修改為允許寫入的區(qū)域的地址的步驟包括通過環(huán)形隊列來存儲允許寫入的區(qū)域的地址,其中,每一個隊列成員中記錄一個允許寫入的區(qū)域的地址;將非法寫入地址修改為環(huán)形隊列的首指針指向的隊列成員中記錄的地址;將環(huán)形隊列的首指針指向環(huán)形隊列中的下一個隊列成員。
在將非法寫入地址修改為允許寫入的區(qū)域的地址之后,嵌入式系統(tǒng)中寫保護的控制方法還包括記錄寫指令的指令地址;根據(jù)所記錄的指令地址對寫指令所在的程序進行錯誤定位。根據(jù)所記錄的指令地址對寫指令所在的程序進行錯誤定位的步驟包括將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息,其中,錯誤定位信息根據(jù)所記錄的指令地址計算得到;或者接收用戶輸入的讀取所記錄的指令地址的請求消息,響應(yīng)于請求消息將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息,其中,錯誤定位信息根據(jù)所記錄的指令地址計算得到。通過以下步驟來設(shè)置允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消 CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。根據(jù)本發(fā)明的另一方面,提供了一種嵌入式系統(tǒng)中寫保護的控制裝置,其包括獲取單元,用于獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,非法寫入地址被預(yù)先設(shè)置為寫保護;修改單元,用于將非法寫入地址修改為允許寫入的區(qū)域的地址;執(zhí)行單元,用于對允許寫入的區(qū)域的地址執(zhí)行寫指令的操作。嵌入式系統(tǒng)中寫保護的控制裝置還包括存儲單元,用于記錄寫指令的指令地址; 定位單元,用于根據(jù)所記錄的指令地址對寫指令所在的程序進行錯誤定位。定位單元包括發(fā)送模塊,用于將所記錄的指令地址發(fā)送給用戶,或者,響應(yīng)于請求消息將所記錄的指令地址發(fā)送給用戶;接收模塊,用于接收用戶輸入的讀取所記錄的指令地址的請求消息,并接收用戶輸入的錯誤定位信息,其中,錯誤定位信息根據(jù)所記錄的指令地址計算得到。嵌入式系統(tǒng)中寫保護的控制裝置還包括設(shè)置單元,用于通過以下步驟來設(shè)置允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。在本發(fā)明中,通過將非法寫入地址修改為允許寫入的區(qū)域的地址來執(zhí)行要求非法寫入地址的寫指令,使得對于寫保護的控制不依賴于操作系統(tǒng)提供的設(shè)備驅(qū)動接口、 CPU(中央處理器)的MMU(內(nèi)存管理單元)功能、專門的硬件寫保護電路和邏輯資源或存儲介質(zhì)自帶的寫保護功能,從而能夠解決現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低的問題,提高了嵌入式系統(tǒng)中寫保護的安全性;此外,由于本發(fā)明可以獨立完成、并且不需要額外增加任何硬件電路或邏輯資源,因此,使得本發(fā)明的應(yīng)用成本較低,并能夠適用于多種應(yīng)用場景;另一方面,本發(fā)明由嵌入式軟件控制底層硬件來實現(xiàn)一段指定范圍地址空間內(nèi)的數(shù)據(jù)寫保護功能,從而能夠?qū)崿F(xiàn)根據(jù)既定策略對嵌入式系統(tǒng)中指定數(shù)據(jù)區(qū)域打開或關(guān)閉寫保護功能,同時讀取功能不受影響;又一方面,可以通過記錄的寫指令的指令地址對寫保護期間的寫入操作進行記錄和反向追蹤分析,便于開發(fā)人員的程序錯誤定位和處理。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中
圖1是現(xiàn)有技術(shù)中使用操作系統(tǒng)提供API來保護數(shù)據(jù)區(qū)域的流程圖;圖2是現(xiàn)有技術(shù)中使用帶寫保護功能存儲介質(zhì)來保護數(shù)據(jù)區(qū)域的裝置的結(jié)構(gòu)圖;圖3是現(xiàn)有技術(shù)中使用CPU的MMU保護數(shù)據(jù)區(qū)域的流程圖;圖4是根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制方法的優(yōu)選流程圖;圖5是本發(fā)明實現(xiàn)指定數(shù)據(jù)區(qū)域?qū)懕Wo控制方法的流程示意圖;圖6是圖5中步驟S503判斷中斷來源的流程圖;圖7是圖5中步驟S505修改非法寫入地址并記錄非法操作的流程圖;圖8是根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制裝置的優(yōu)選結(jié)構(gòu)圖。
具體實施例方式實施例1圖4是根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制方法的優(yōu)選流程圖,其包括如下步驟S401,獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,非法寫入地址被預(yù)先設(shè)置為寫保護;S402,將非法寫入地址修改為允許寫入的區(qū)域的地址;S403,對允許寫入的區(qū)域的地址執(zhí)行寫指令的操作。在本實施例中,通過將非法寫入地址修改為允許寫入的區(qū)域的地址來執(zhí)行要求非法寫入地址的寫指令,使得對于寫保護的控制不依賴于操作系統(tǒng)提供的設(shè)備驅(qū)動接口、 CPU(中央處理器)的MMU(內(nèi)存管理單元)功能、專門的硬件寫保護電路和邏輯資源或存儲介質(zhì)自帶的寫保護功能,從而能夠解決現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低的問題,提高了嵌入式系統(tǒng)中寫保護的安全性。此外,由于本發(fā)明可以獨立完成、并且不需要額外增加任何硬件電路或邏輯資源,因此,使得本發(fā)明的應(yīng)用成本較低,并能夠適用于多種應(yīng)用場景。在獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址之前,嵌入式系統(tǒng)中寫保護的控制方法還包括檢測到出現(xiàn)CPU總線異常中斷;通過內(nèi)存狀態(tài)寄存器中的標(biāo)志位來判斷引起CPU總線異常中斷的寫指令所要寫入的寫入地址是否屬于被寫保護的數(shù)據(jù)區(qū)域;若屬于,則判斷出引起CPU總線異常中斷的寫指令所要寫入的寫入地址為非法寫入地址,并執(zhí)行獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址的步驟。 在本實施例中,通過標(biāo)志位的判斷,能夠準確快速地判斷總線異常中斷的原因。在上述檢測CPU總線異常中斷的過程中,設(shè)置CPU總線訪問異常入口地址,接管總線異常處理中斷程序,優(yōu)選的,異常處理中斷入口地址由CPU提供。將所述非法寫入地址修改為允許寫入的區(qū)域的地址的步驟包括通過環(huán)形隊列來存儲允許寫入的區(qū)域的地址,其中,每一個隊列成員中記錄一個允許寫入的區(qū)域的地址;將所述非法寫入地址修改為所述環(huán)形隊列的首指針指向的隊列成員中記錄的地址;將所述環(huán)形隊列的首指針指向所述環(huán)形隊列中的下一個隊列成員。通過上述環(huán)形隊列的方式來存儲允許寫入的區(qū)域的地址,可以實現(xiàn)快速地合法地址替換,并節(jié)約了存儲空間。在上述將所述非法寫入地址修改為允許寫入的區(qū)域的地址的過程中,異常處理程序解析機器指令中被寫保護地址并修改其為可寫地址,這里,機器指令一般為RISC(精簡指令集)格式。在嵌入式系統(tǒng)中使用的CPU廣泛采用RISC格式??梢愿鶕?jù)修改存放寫入地址的寄存器值為預(yù)先設(shè)定的可寫入地址,并保存當(dāng)前寫入指令的物理地址,達到非法寫入動作重新定向到合法地址和記錄寫入操作來源的效果。預(yù)先設(shè)定的寫入地址空間由一個環(huán)形隊列構(gòu)成,每個隊列成員均包含寫入操作的指令地址,對寫保護數(shù)據(jù)區(qū)域的寫入操作將通過FIFO(先入先出)的方式進入隊列保存或者被后續(xù)寫入操作覆蓋;根據(jù)需要,隊列成員還可以包含當(dāng)前時間戳等記錄,便于更好的反向追蹤分析。在將所述非法寫入地址修改為允許寫入的區(qū)域的地址之后,嵌入式系統(tǒng)中寫保護的控制方法還包括記錄所述寫指令的指令地址;根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位。在本實施例中,可以通過記錄的寫指令的指令地址對寫保護期間的寫入操作進行記錄和反向追蹤分析,便于開發(fā)人員的程序錯誤定位和處理。優(yōu)選的,還可以對環(huán)形隊列進行分析,從而得出非法寫入操作的來源及寫入值的記錄,記錄最大長度為環(huán)形隊列的成員個數(shù)。根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位的步驟包括將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息,其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到;或者接收用戶輸入的讀取所記錄的指令地址的請求消息, 響應(yīng)于所述請求消息將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息, 其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到。在本實施例中,通過這種主動和被動的方式來與用戶交互記錄的指令地址和錯誤定位信息,可以滿足不同的場景需求,便于開發(fā)人員的程序錯誤定位和處理。通過以下步驟來設(shè)置所述允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消所述CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。在本實施例中,由嵌入式軟件控制底層硬件來實現(xiàn)一段指定范圍地址空間內(nèi)的數(shù)據(jù)寫保護功能,從而能夠?qū)崿F(xiàn)根據(jù)既定策略對嵌入式系統(tǒng)中指定數(shù)據(jù)區(qū)域打開或關(guān)閉寫保護功能,同時讀取功能不受影響。優(yōu)選的,CPU外接的芯片的選擇通過片選屬性或標(biāo)志位來完成,其中,CPU片選訪問屬性通常由CPU提供的內(nèi)部寄存器來設(shè)置,片選寫保護功能屬性由CPU硬件提供如嵌入式系統(tǒng)中常用的PowerPC系列處理器就提供這種功能,在ARM和MIPS系列某些處理器中也提供類似功能。實施例2以下結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述。以網(wǎng)絡(luò)通信設(shè)備類嵌入式系統(tǒng)中常用的32位RISC指令集的CPU,F(xiàn)reescale (飛思卡爾)公司的通信處理器MPC860系列為例。如圖5所示,包括以下步驟步驟S501、確定CPU的總線異常中斷處理入口地址。通過MPC860用戶手冊中芯片描述可知,MPC860處理總線異常的中斷向量偏移地址為0x00200 (見用戶手冊7. 1. 2. 2章節(jié))機器檢查中斷(Machine Check hterrupt)。機器檢查中斷由MSR[ME] (MSR 機器狀態(tài)寄存器的ME比特位)置位來使能,產(chǎn)生原因一般是訪問地址不存在或發(fā)生數(shù)據(jù)錯誤,寫入總線保護的區(qū)域也會產(chǎn)生中斷。步驟S502、接管CPU總線異常處理中斷程序。通過將用戶自定義ISR(中斷服務(wù)程序)UsrMachChk注冊到0x00200中斷向量入口處,并置位MSR寄存器ME位,即可接管該中斷,取得機器檢查中斷的控制權(quán)。步驟S503、檢查觸發(fā)總線異常處理中斷原因。機器檢查中斷在MPC860中使用菊花鏈的處理方式級聯(lián),在機器檢查中斷服務(wù)程序^rMachChk中,首先進行中斷來源判斷??梢酝ㄟ^判斷MSTAT (內(nèi)存狀態(tài)寄存器,Memory Status Register)的標(biāo)志位WPER是否置位, 來判斷機器檢查中斷產(chǎn)生原因是被寫保護的數(shù)據(jù)區(qū)域有寫入操作。如果MSTAT[WPER]沒有置位,則跳轉(zhuǎn)到原來的機器檢查中斷服務(wù)程序中處理;若置位,先清掉MSTAT[WPER],避免重復(fù)處理。具體的,本發(fā)明還提供了一種優(yōu)選的判斷中斷來源的方法,如圖6所示的步驟 S601-S606。步驟S504、解析寫入操作的指令獲取寫入地址、指令物理地址等內(nèi)容。觸發(fā)中斷的指令物理地址存放在r0寄存器中,作為中斷的返回地址。從r0寄存器中可以獲取寫入指令地址,并根據(jù)其地址讀取指令內(nèi)容。根據(jù)PowerPC的RISC指令集分析,指令寫入目的地址一般是內(nèi)部寄存器,位于32比特長度指令操作碼后的第6到10比特(指令操作碼起始比特位為0)位域,可以獲得寫入指令的目的寄存器地址(一般是r31),該寄存器內(nèi)容即是被寫入的物理地址。步驟S505、修改寫入指令目標(biāo)寄存器內(nèi)容,將非法的(被保護)寫入地址改為合法的地址即預(yù)先設(shè)置的環(huán)形隊列首指針指向的成員地址,并移動環(huán)形隊列的首指針指向下一個隊列成員。如果有必要同時記錄如系統(tǒng)時間等有用數(shù)據(jù)。具體的,本發(fā)明還提供了一種優(yōu)選的修改非法寫入地址并記錄非法操作的方法,如圖7所示的S701-S704步驟S506、退出機器檢查中斷服務(wù)程序。步驟S507、根據(jù)對嵌入式系統(tǒng)硬件具體設(shè)計的分析(電路原理圖、文檔等),可確定被保護的數(shù)據(jù)區(qū)域使用MPC860的χ號(取值范圍0 7)片選訪問。步驟S508、將MPC860的χ號片選對應(yīng)片選設(shè)置寄存器BRx (BR0 BR7)的WP位置為1,即可使寫保護功能生效。任何對保護區(qū)域的寫入操作將會觸發(fā)機器檢查中斷,并進入被接管的機器中斷服務(wù)程序^rMachChk中處理。步驟S509、將MPC860的χ號片選對應(yīng)片選設(shè)置寄存器BRx (BR0 BR7)的WP位置為0,即可將寫保護功能取消,對該片選區(qū)域的寫入操作將會恢復(fù)正常,不會觸發(fā)機器檢查中斷。如果有其他原因產(chǎn)生了機器檢查中斷,中斷服務(wù)程序^rMachChk會通過步驟S503 的判斷,跳轉(zhuǎn)到原有的機器檢查中斷服務(wù)程序中,不會影響其他中斷源的正常處理。步驟S510、通過對預(yù)先定義的環(huán)形隊列內(nèi)容(步驟S505產(chǎn)生該數(shù)據(jù))進行分析, 即可得出非法寫入操作的來源等記錄,達到類似日志系統(tǒng)的效果。實施例3圖8是根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制裝置的優(yōu)選結(jié)構(gòu)圖,其包括獲取單元801,用于獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,非法寫入地址被預(yù)先設(shè)置為寫保護;修改單元802,用于將非法寫入地址修改為允許寫入的區(qū)域的地址;執(zhí)行單元803,用于對允許寫入的區(qū)域的地址執(zhí)行寫指令的操作。在本實施例中,通過將非法寫入地址修改為允許寫入的區(qū)域的地址來執(zhí)行要求非法寫入地址的寫指令,使得對于寫保護的控制不依賴于操作系統(tǒng)提供的設(shè)備驅(qū)動接口、 CPU(中央處理器)的MMU(內(nèi)存管理單元)功能、專門的硬件寫保護電路和邏輯資源或存儲介質(zhì)自帶的寫保護功能,從而能夠解決現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低的問題,提高了嵌入式系統(tǒng)中寫保護的安全性。此外,由于本發(fā)明可以獨立完成、并且不需要額外增加任何硬件電路或邏輯資源,因此,使得本發(fā)明的應(yīng)用成本較低,并能夠適用于多種應(yīng)用場景。在獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址之前,獲取單元 801檢測到出現(xiàn)CPU總線異常中斷,并通過內(nèi)存狀態(tài)寄存器中的標(biāo)志位來判斷引起CPU總線異常中斷的寫指令所要寫入的寫入地址是否屬于被寫保護的數(shù)據(jù)區(qū)域;若屬于,則判斷出引起CPU總線異常中斷的寫指令所要寫入的寫入地址為非法寫入地址,并執(zhí)行獲取引起 CPU總線異常中斷的寫指令所要寫入的非法寫入地址的步驟。在本實施例中,通過標(biāo)志位能夠準確快速地判斷總線異常中斷的原因。在上述檢測CPU總線異常中斷的過程中,設(shè)置CPU總線訪問異常入口地址,接管總線異常處理中斷程序,優(yōu)選的,異常處理中斷入口地址由CPU提供。修改單元802通過以下步驟將所述非法寫入地址修改為允許寫入的區(qū)域的地址 通過環(huán)形隊列來存儲允許寫入的區(qū)域的地址,其中,每一個隊列成員中記錄一個允許寫入的區(qū)域的地址;將所述非法寫入地址修改為所述環(huán)形隊列的首指針指向的隊列成員中記錄的地址;將所述環(huán)形隊列的首指針指向所述環(huán)形隊列中的下一個隊列成員。通過上述環(huán)形隊列的方式來存儲允許寫入的區(qū)域的地址,可以實現(xiàn)快速地合法地址替換,并節(jié)約了存儲空間。在上述將所述非法寫入地址修改為允許寫入的區(qū)域的地址的過程中,異常處理程序解析機器指令中被寫保護地址并修改其為可寫地址,這里,機器指令一般為RISC(精簡指令集)格式。在嵌入式系統(tǒng)中使用的CPU廣泛采用RISC格式??梢愿鶕?jù)修改存放寫入地址的寄存器值為預(yù)先設(shè)定的可寫入地址,并保存當(dāng)前寫入指令的物理地址,達到非法寫入動作重新定向到合法地址和記錄寫入操作來源的效果。預(yù)先設(shè)定的寫入地址空間由一個環(huán)形隊列構(gòu)成,每個隊列成員均包含寫入操作的指令地址,對寫保護數(shù)據(jù)區(qū)域的寫入操作將通過FIFO(先入先出)的方式進入隊列保存或者被后續(xù)寫入操作覆蓋;根據(jù)需要,隊列成員還可以包含當(dāng)前時間戳等記錄,便于更好的反向追蹤分析。根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制裝置還包括存儲單元804,用于記錄所述寫指令的指令地址;定位單元805,用于根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位。在本實施例中,可以通過記錄的寫指令的指令地址對寫保護期間的寫入操作進行記錄和反向追蹤分析,便于開發(fā)人員的程序錯誤定位和處理。優(yōu)選的,還可以對環(huán)形隊列進行分析,從而得出非法寫入操作的來源及寫入值的記錄,記錄最大長度為環(huán)形隊列的成員個數(shù)。所述定位單元805包括發(fā)送模塊,用于將所記錄的指令地址發(fā)送給用戶,或者, 響應(yīng)于請求消息將所記錄的指令地址發(fā)送給用戶,接收模塊,用于接收用戶輸入的讀取所記錄的指令地址的所述請求消息,并接收所述用戶輸入的錯誤定位信息,其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到。在本實施例中,通過這種主動和被動的方式來與用戶交互記錄的指令地址和錯誤定位信息,可以滿足不同的場景需求,便于開發(fā)人員的程序錯誤定位和處理。根據(jù)本發(fā)明實施例的嵌入式系統(tǒng)中寫保護的控制裝置還包括設(shè)置單元806,用于通過以下步驟來設(shè)置所述允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消所述CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。在本實施例中,由嵌入式軟件控制底層硬件來實現(xiàn)一段指定范圍地址空間內(nèi)的數(shù)據(jù)寫保護功能,從而能夠?qū)崿F(xiàn)根據(jù)既定策略對嵌入式系統(tǒng)中指定數(shù)據(jù)區(qū)域打開或關(guān)閉寫保護功能,同時讀取功能不受影響。優(yōu)選的,CPU外接的芯片的選擇通過片選屬性或標(biāo)志位來完成,其中,CPU片選訪問屬性通常由CPU提供的內(nèi)部寄存器來設(shè)置,片選寫保護功能屬性由CPU硬件提供如嵌入式系統(tǒng)中常用的PowerPC系列處理器就提供這種功能,在ARM和MIPS系列某些處理器中也提供類似功能。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種嵌入式系統(tǒng)中寫保護的控制方法,其特征在于,包括獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,所述非法寫入地址被預(yù)先設(shè)置為寫保護;將所述非法寫入地址修改為允許寫入的區(qū)域的地址; 對所述允許寫入的區(qū)域的地址執(zhí)行所述寫指令的操作。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址之前,還包括檢測到出現(xiàn)CPU總線異常中斷;通過內(nèi)存狀態(tài)寄存器中的標(biāo)志位來判斷引起CPU總線異常中斷的寫指令所要寫入的寫入地址是否屬于被寫保護的數(shù)據(jù)區(qū)域;若屬于,則判斷出引起CPU總線異常中斷的寫指令所要寫入的寫入地址為非法寫入地址,并執(zhí)行獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址的步驟。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,將所述非法寫入地址修改為允許寫入的區(qū)域的地址的步驟包括通過環(huán)形隊列來存儲允許寫入的區(qū)域的地址,其中,每一個隊列成員中記錄一個允許寫入的區(qū)域的地址;將所述非法寫入地址修改為所述環(huán)形隊列的首指針指向的隊列成員中記錄的地址; 將所述環(huán)形隊列的首指針指向所述環(huán)形隊列中的下一個隊列成員。
4.根據(jù)權(quán)利要求1至3中任一項所述的方法,其特征在于,在將所述非法寫入地址修改為允許寫入的區(qū)域的地址之后,還包括 記錄所述寫指令的指令地址;根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位的步驟包括將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息,其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到;或者接收用戶輸入的讀取所記錄的指令地址的請求消息,響應(yīng)于所述請求消息將所記錄的指令地址發(fā)送給用戶,并接收用戶輸入的錯誤定位信息,其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過以下步驟來設(shè)置所述允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消所述CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。
7.一種嵌入式系統(tǒng)中寫保護的控制裝置,其特征在于,包括獲取單元,用于獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中, 所述非法寫入地址被預(yù)先設(shè)置為寫保護;修改單元,用于將所述非法寫入地址修改為允許寫入的區(qū)域的地址; 執(zhí)行單元,用于對所述允許寫入的區(qū)域的地址執(zhí)行所述寫指令的操作。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括 存儲單元,用于記錄所述寫指令的指令地址;定位單元,用于根據(jù)所記錄的指令地址對所述寫指令所在的程序進行錯誤定位。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述定位單元包括發(fā)送模塊,用于將所記錄的指令地址發(fā)送給用戶,或者,響應(yīng)于請求消息將所記錄的指令地址發(fā)送給用戶;接收模塊,用于接收用戶輸入的讀取所記錄的指令地址的所述請求消息,并接收所述用戶輸入的錯誤定位信息,其中,所述錯誤定位信息根據(jù)所記錄的指令地址計算得到。
10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括設(shè)置單元,用于通過以下步驟來設(shè)置所述允許寫入的區(qū)域的地址通過設(shè)置寄存器中的標(biāo)志位來取消所述CPU外接的芯片的整個存儲區(qū)域的寫保護功能;將取消了寫保護功能的芯片的整個存儲區(qū)域的地址設(shè)置為允許寫入的區(qū)域的地址。
全文摘要
本發(fā)明提供了一種嵌入式系統(tǒng)中寫保護的控制方法和裝置,其中,該方法包括獲取引起CPU總線異常中斷的寫指令所要寫入的非法寫入地址,其中,非法寫入地址被預(yù)先設(shè)置為寫保護;將非法寫入地址修改為允許寫入的區(qū)域的地址;對允許寫入的區(qū)域的地址執(zhí)行寫指令的操作。本發(fā)明解決了現(xiàn)有技術(shù)中的嵌入式系統(tǒng)中寫保護方法安全性較低的問題,提高了嵌入式系統(tǒng)中寫保護的安全性。
文檔編號G06F12/14GK102207913SQ201110154280
公開日2011年10月5日 申請日期2011年6月9日 優(yōu)先權(quán)日2011年6月9日
發(fā)明者王超, 王闖, 魏猷君 申請人:中興通訊股份有限公司