本發(fā)明涉及一種檢測方法,尤其是一種用于嵌入式軟件中的異常中斷源定位檢測方法,屬于中斷定位檢測的技術(shù)領(lǐng)域。
背景技術(shù):
異常屬于中斷中的一種特例,它是對CPU級別中出現(xiàn)非期望指令的一種響應(yīng),對于高安全性系統(tǒng),異常中斷處理往往是軟件中最后的一道保護門檻,在該處理中,可以通過監(jiān)測??臻g的值,將產(chǎn)生異常的源頭給定位。在嵌入式軟件中,對其處理至關(guān)重要。但在現(xiàn)有國內(nèi)大多數(shù)嵌入式軟件中,由于對異常的理解不深入,異常處理往往比較粗略,難以對軟件觸發(fā)的異常源進行定位,增大了異常源分析的難度。
國內(nèi)現(xiàn)有的異常監(jiān)測手段主要采用一些器件,如仿真器、邏輯分析儀、示波器等,通過在軟件中采用插莊的方式,對異常進行捕捉與異常源定位,由于軟件中產(chǎn)生異常是非常隱蔽的,采用該方法難以找到異常源,且排查過程較長。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是克服現(xiàn)有技術(shù)中存在的不足,提供一種用于嵌入式軟件的異常中斷源定位檢測方法,其操作方便,能快速實現(xiàn)異常中斷源的有效定位,提高測試異常處理的有效性,安全可靠。
按照本發(fā)明提供的技術(shù)方案,一種用于嵌入式軟件的異常中斷源定位檢測方法,所述異常中斷源定位檢測方法包括如下步驟:
S1、確定CPU內(nèi)核級的異常中斷,并在所述異常中斷中選取軟件可觸發(fā)的異常中斷,且在軟件運行的任務(wù)中進行插樁以及設(shè)置故障代碼,以使得軟件在運行到插樁代碼時,觸發(fā)所選定的軟件異常中斷;
S2、啟動并運行軟件,在觸發(fā)上述軟件異常中斷后,對所述軟件異常中斷的中斷信息進行捕獲;
S3、將上述捕獲軟件異常中斷的中斷信息發(fā)送至上位機內(nèi),上位機根據(jù)所述軟件異常中斷的中斷信息進行觸發(fā)軟件異常中斷的中斷分析,以確定觸發(fā)所述軟件異常中斷的中斷源。
所述步驟S2具體包括如下步驟:
S2-1、對每個軟件異常中斷進行中斷服務(wù)函數(shù)的掛接,在每個軟件異常中斷服務(wù)函數(shù)中調(diào)用異常信息保存功能函數(shù)以及打印功能函數(shù);
S2-2、在異常中斷服務(wù)函數(shù)中對異常中斷號、異常中斷恢復(fù)地址、異常產(chǎn)生時的狀態(tài)以及異常產(chǎn)生時程序訪問的地址數(shù)據(jù)進行獲取,從而捕獲軟件異常中斷的中斷信息。
所述步驟S3中,上位機根據(jù)軟件異常中斷的中斷分析,能得到軟件異常中斷的異常中斷號、發(fā)生異常中斷的代碼位置以及進入異常中斷時訪問的地址數(shù)據(jù);通過查詢軟件手冊確定異常中斷源的類型,通過map文件查找發(fā)生異常中斷的代碼位置對應(yīng)的函數(shù)名稱,以確定觸發(fā)所述軟件異常中斷的中斷源。
本發(fā)明的優(yōu)點:可實現(xiàn)對嵌入式軟件的異常中斷的實時檢測,并通過檢測到的異常中斷信息來具體定位發(fā)生異常的代碼位置及機器狀態(tài),實現(xiàn)異常中斷源的精確定位,以此來為軟件開發(fā)以及軟件運行過程中產(chǎn)生的非預(yù)期的異常中斷提供一種有效的排故定位手段。同時,通過插樁以及故障代碼的設(shè)置能夠測試異常保護的有效性,安全可靠。
附圖說明
圖1為本發(fā)明的流程圖。
圖2為本發(fā)明具體實施例對應(yīng)的軟件異常中斷匯報的流程圖。
具體實施方式
下面結(jié)合具體附圖和實施例對本發(fā)明作進一步說明。
如圖1所示:為了能快速實現(xiàn)異常中斷源的有效定位,提高測試異常處理的有效性,本發(fā)明異常中斷源定位檢測方法包括如下步驟:
S1、確定CPU內(nèi)核級的異常中斷,并在所述異常中斷中選取軟件可觸發(fā)的異常中斷,且在軟件運行的任務(wù)中進行插樁以及設(shè)置故障代碼,以使得軟件在運行到插樁代碼時,觸發(fā)所選定的軟件異常中斷;
本發(fā)明實施例中,對于確定的CPU而言,其對應(yīng)內(nèi)核級的異常中斷為確定已知的,且異常中斷中軟件可觸發(fā)的異常中斷也能隨之確定,具體為本技術(shù)領(lǐng)域人員所熟知,此處不再贅述。對于選定的軟件可觸發(fā)異常中斷,為了能夠進入所述軟件異常中斷,需要在軟件運行的任務(wù)中進行插樁以及設(shè)置故障代碼,從而使得軟件在運行到插樁代碼時,能夠觸發(fā)所選定的軟件異常中斷。對于確定的軟件異常中斷,可以采用本技術(shù)領(lǐng)域常用的技術(shù)手段實現(xiàn)插樁以及設(shè)置故障代碼,具體的實現(xiàn)過程為本技術(shù)領(lǐng)域人員所熟知,此處不再贅述。
S2、啟動并運行軟件,在觸發(fā)上述軟件異常中斷后,對所述軟件異常中斷的中斷信息進行捕獲;
本發(fā)明實施例中,所述步驟S2具體包括如下步驟:
S2-1、對每個軟件異常中斷進行中斷服務(wù)函數(shù)的掛接,在每個軟件異常中斷服務(wù)函數(shù)中調(diào)用異常信息保存功能函數(shù)以及打印功能函數(shù);
S2-2、在異常中斷服務(wù)函數(shù)中對異常中斷號、異常中斷恢復(fù)地址、異常產(chǎn)生時的狀態(tài)以及異常產(chǎn)生時程序訪問的地址數(shù)據(jù)進行獲取,從而捕獲軟件異常中斷的中斷信息。
本發(fā)明實施例中,根據(jù)具體的軟件,采用本技術(shù)領(lǐng)域常用的技術(shù)手段實現(xiàn)對中斷服務(wù)函數(shù)的掛接、異常信息保存功能函數(shù)的調(diào)用以及打印功能函數(shù)的調(diào)用,具體為本技術(shù)領(lǐng)域人員所熟知,此處不再贅述。
在異常中斷服務(wù)函數(shù)中,獲取異常中斷號、異常中斷恢復(fù)地址、異常產(chǎn)生時的狀態(tài)以及異常產(chǎn)生時程序訪問的地址數(shù)據(jù)。其中異常產(chǎn)生時的狀態(tài)指異常產(chǎn)生時刻的器件的工作模式,主要包括了中斷及異常的掩碼設(shè)置、系統(tǒng)權(quán)限以及一些其它狀態(tài)模式,用以分析并確認異常產(chǎn)生時的狀態(tài)情況。異常產(chǎn)生時程序訪問的地址數(shù)據(jù)幫助定位引發(fā)異常時的代碼位置。在異常中斷服務(wù)函數(shù)中取得上述信息后,將上述獲取的內(nèi)容存儲到非易失性存儲器內(nèi),即獲取軟件異常中斷的終端信息。
S3、將上述捕獲軟件異常中斷的中斷信息發(fā)送至上位機內(nèi),上位機根據(jù)所述軟件異常中斷的中斷信息進行觸發(fā)軟件異常中斷的中斷分析,以確定觸發(fā)所述軟件異常中斷的中斷源。
本發(fā)明實施例中,將獲取軟件異常中斷的中斷信息發(fā)送至上位機內(nèi)的過程實現(xiàn)異常中斷信息的匯報。具體實施時,為了實現(xiàn)異常中斷信息向上位機的匯報,需要對CPU內(nèi)的通訊功能進行初始化,并使得軟件可使用CPU的資源進行數(shù)據(jù)發(fā)送。從而,在獲取上述的中斷信息后,將中斷信息進行打包,并將打包后的數(shù)據(jù)傳輸至上位機;在軟件中可以設(shè)置的時間延時,以保證數(shù)據(jù)量能夠發(fā)送完成,具體實現(xiàn)與上位機之間通訊以及數(shù)據(jù)發(fā)送的過程為本技術(shù)領(lǐng)域人員所熟知,此處不再贅述。
上位機根據(jù)軟件異常中斷的中斷分析,能得到軟件異常中斷的異常中斷號、發(fā)生異常中斷的代碼位置以及進入異常中斷時訪問的地址數(shù)據(jù);通過查詢軟件手冊確定異常中斷源的類型,通過map文件查找發(fā)生異常中斷的代碼位置對應(yīng)的函數(shù)名稱,以確定觸發(fā)所述軟件異常中斷的中斷源。具體實施時,通過上述的中斷分析,可以對軟件異常中斷的觸發(fā)精確定位到某行代碼。
以嵌入式軟件為例,對本發(fā)明的具體過程進行詳細說明。具體地,控制軟件的運行平臺為PowerPC5554處理器,、具體實施過程為:
PowerPC5554處理器上共有19個內(nèi)核級異常,選擇IVOR13異常中斷作為軟件觸發(fā)中斷。IVOR13為TLB地址命中失敗異常,對未定義的地址空間進行訪問即會觸發(fā)此異常中斷。在軟件初始化完成后,即可插樁對未定義的地址空間進行訪問,例如0x50000000。
在中斷初始化時,對每個異常中斷進行中斷服務(wù)函數(shù)的掛接,在中斷服務(wù)函數(shù)中調(diào)用異常信息匯報函數(shù)reportExceptionInfo。
在軟件進行初始化時,對PowerPC5554處理器上的DMA通道進行初始化,并配置串口發(fā)送。設(shè)計logMsg功能函數(shù),用于實現(xiàn)與上位機通訊的功能。
在異常信息匯報函數(shù)reportExceptionInfo中獲取異常中斷號,對中斷寄存器DEAR、ESR、SRR0、SRR1(CSRR0、CSRR1)等進行訪問。
在reportExceptionInfo函數(shù)中獲取異常源信息之后調(diào)用logMsg將獲取到的信息通過串口發(fā)送到上位機,并在reportExceptionInfo函數(shù)最后設(shè)置相應(yīng)的延遲時間,如圖2所示。
通過獲取上位機的數(shù)據(jù),并對比程序編譯生成的map文件,可以很容易的定位產(chǎn)生了IVOR13號異常,異常代碼的位置在插樁函數(shù)內(nèi),異常產(chǎn)生時程序訪問的地址為0x50000000。
本發(fā)明可實現(xiàn)對嵌入式軟件的異常中斷的實時檢測,并通過檢測到的異常中斷信息來具體定位發(fā)生異常的代碼位置及機器狀態(tài),實現(xiàn)異常中斷源的精確定位,以此來為軟件開發(fā)以及軟件運行過程中產(chǎn)生的非預(yù)期的異常中斷提供一種有效的排故定位手段。同時,通過插樁以及故障代碼的設(shè)置能夠測試異常保護的有效性,安全可靠。