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