本發(fā)明涉及嵌入式系統(tǒng)技術領域,尤其涉及一種arm7仿真目標機實現(xiàn)方法。
背景技術:
目前,嵌入式系統(tǒng)已經(jīng)在不知不覺中走進大家的生活,如智能手機、智能冰箱、高智能汽車等等。在這些終端中,都存在嵌入式系統(tǒng)的影子。嵌入式系統(tǒng)是以應用為中心、以計算機技術為基礎、軟硬件可裁剪、功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。
嵌入式系統(tǒng)的開發(fā)包括硬件與軟件兩個部分,硬件的開發(fā)通常先于軟件,硬件的設計、制板與調試過程往往要消耗大量時間,其必然導致軟件研制起始節(jié)點的滯后,造成整體開發(fā)進度的拖延。因此,軟硬件協(xié)同開發(fā)相關方法和理論一直是學術界和工業(yè)界努力的方向。所以,基于特定體系結構的仿真目標機就進入了人們的視線,它可以以軟件仿真硬件環(huán)境,提供測試代碼運行所需要的硬件資源仿真,這樣,在硬件需求提出后,并不需要真正的硬件出廠,就可以進行軟件的研制以及調試。但是,這類的仿真環(huán)境往往成本很高,而且體系單一,例如arm結構、sparc結構、x86結構,每一種結構都有自己獨立的一套仿真環(huán)境,不具備通用性,使用起來非常不方便,對企業(yè)開發(fā)成本會造成很大的負擔。
技術實現(xiàn)要素:
為了解決現(xiàn)有技術中的問題,本發(fā)明首先對傳統(tǒng)gdb結構進行優(yōu)化改造,使其在提供文件解析、調試功能的基礎上增加對可配置性的支持,具有通用性框架,支持多種體系結構;然后,在gdb可配置框架基礎上,提出了一種實現(xiàn)arm7仿真目標機的方法。
為達上述目的,本發(fā)明通過以下技術方案實現(xiàn):
一種基于gdb可配置框架的arm7仿真目標機實現(xiàn)方法,所述仿真目標機運行的宿主機基于windows系統(tǒng),處理器仿真內核以及仿真外部設備以動態(tài)鏈接庫dll的形式提供,由gdb加載處理器仿真內核dll,由處理器仿真內核加載仿真外設dll;所述方法包括:
對gdb的通用性優(yōu)化:
首先對gdb的功能層進行改造,將gdb中與目標結構相關的數(shù)據(jù)結構進行通用性的擴充,使其能夠支持多種目標結構,同時將數(shù)據(jù)交互、函數(shù)調用的緊耦合部分全部改為通用調用接口,將仿真器抽取出來與gdb分離,以可動態(tài)加載的動態(tài)鏈接庫形式提供;
然后對gdb的目標抽象層進行改造,使gdb可解析多種可執(zhí)行文件結構;
再對gdb的仿真目標層進行改造,直接將仿真目標層從gdb中摳出,gdb只能訪問到通用接口,而仿真器功能及其接口的實現(xiàn)則由通用仿真核通過動態(tài)鏈接的形式提供,完成gdb對指令集仿真訪問的通用性優(yōu)化;
在gdb的可配置框架下實現(xiàn)arm7體系結構的指令集仿真器模塊,構建arm7仿真目標機的仿真內核,具體為根據(jù)arm7處理器體系結構和指令集的特點,確定以下基本的操作:1)三級流水線的更新操作、2)指令的條件碼判斷、3)移位操作、4)alu操作、5)寄存器訪問、6)存儲器訪問;通過以上幾種基本的操作,能夠完成對大多數(shù)指令執(zhí)行邏輯的仿真。
附圖說明
圖1是本發(fā)明的仿真目標機系統(tǒng)整體結構示意圖;
圖2是gdb層次結構示意圖;
圖3是可配置gdb與仿真內核之間的關聯(lián)示意圖;
圖4是可配置gdb與仿真內核的通用性接口示意圖;
圖5是可執(zhí)行文件的分析執(zhí)行過程示意圖;
圖6是arm7內核仿真函數(shù)流程圖;
圖7是立即數(shù)移位處理過程示意圖。
具體實施方案
下面通過具體實施方式結合附圖對本發(fā)明作進一步詳細說明。
本發(fā)明設計的仿真目標機主要功能是模擬arm7等處理器對指令集的處理能力。當仿真器獲得可執(zhí)行程序文件之后,通過gdb的解析,將應用程序的代碼段、數(shù)據(jù)段等加載到仿真器的虛擬內存中,之后仿真器就可以在內存中取指、譯碼、執(zhí)行,這樣可以模擬在真實arm7處理器上的運行效果。同時,整個仿真環(huán)境還將提供若干個仿真外設,與處理器仿真內核共同工作,搭建用戶需求的仿真環(huán)境。
本發(fā)明的仿真目標機系統(tǒng)整體結構如附圖1所示,仿真目標機運行的宿主機是基于windows系統(tǒng),處理器仿真內核以及仿真外部設備將以動態(tài)鏈接庫dll的形式提供。由gdb加載處理器仿真內核dll,由處理器仿真內核加載仿真外設dll?;趃db,仿真目標機實現(xiàn)了部分源代碼級的調試功能。gdb本身就是一款強大的調試器,仿真內核以dll的形式提供,也就是說gdb本身并沒有底層的仿真例程,只有上層解析功能,許多仿真器相關的調試功能是空缺的。因此,這些仿真器相關的調試功能就需要由仿真內核自己來實現(xiàn)。仿真內核主要實現(xiàn)的調試功能有仿真線程的啟動、程序的仿真運行啟動、程序運行暫停、程序運行恢復、程序強制停止退出、各種斷點操作、查看寄存器/內存信息、查看仿真核運行狀態(tài)等。
gdb(thegnuprojectdebugger)是gnu開源組織發(fā)布的一個強大的unix下的程序調試工具。一般來說,gdb主要完成下面四個方面的功能:
1)啟動被調試程序,可以按照自定義的要求隨心所欲的運行程序。
2)可讓被調試的程序在所指定的調試斷點處停住。
3)當程序被停住時,可以檢查此時程序中所發(fā)生的事。
4)動態(tài)的改變程序的執(zhí)行環(huán)境。
gdb擁有很多的功能層次,各層次之間用過一定的協(xié)議進行通信控制,gdb的層析結構分析如附圖2所示,gdb可以大致分為5個層次:i/o抽象層、控制層、功能層、目標抽象層和仿真目標層。其中,i/o抽象層主要處理gdb的命令循環(huán)等信息交互的操作;控制層主要進行命令解析、表達式分析、信息提取等操作;功能層則是對具體命令的響應處理,包含大量的處理函數(shù)以及相應結構;目標抽象層則是對可執(zhí)行文件進行符號解析等操作;最底層的仿真目標層則是對可執(zhí)行程序進行仿真執(zhí)行,產(chǎn)生結果。
但是傳統(tǒng)gdb只能在初始化配置階段完成一種體系結構的配置,不能滿足對所有結構的通用性支持,因此需要對傳統(tǒng)gdb結構進行優(yōu)化改造,使其在提供文件解析、調試功能的基礎上增加對可配置性的支持,具有通用性框架,支持多種體系結構,即將其仿真目標層替換為目標仿真內核,并且在其上部各個層次中找到體系結構依賴的部分,進行一致性的改造。gdb與指令集仿真器核的關系見附圖3。
具體的優(yōu)化改造的方法:
1)功能層:即gdb邏輯功能,本層次包含了與目標體系結構相關的一些數(shù)據(jù)結構設置,功能實現(xiàn)等。原有gdb只能加載一種目標體系結構的指令集仿真器(或稱為目標核、仿真核),與仿真器之間的數(shù)據(jù)交互,或者叫做函數(shù)調用關系為緊耦合狀態(tài),不能支持多種結構,并且gdb調試解析功能與仿真器為耦合編譯,最終為一個執(zhí)行文件,無法進行拓展。一個成品gdb只能使用一種目標核,限制了gdb的通用性。而本發(fā)明首先就是對gdb的功能層進行了改造,將gdb中與目標結構相關的數(shù)據(jù)結構進行通用性的擴充,使其能夠支持多種目標結構,同時將數(shù)據(jù)交互、函數(shù)調用的緊耦合部分全部改為通用調用接口,將仿真器抽取出來與gdb分離,以可動態(tài)加載的動態(tài)鏈接庫形式提供。這樣,改造之后的gdb為一個訪問通用性接口,與目標核無需一同編譯,結構分離的單獨調試器。它與仿真器之間通過通用性接口完成函數(shù)調用與數(shù)據(jù)的交互,如附圖4所示。
這樣gdb功能層就完成了通用性的改造。綜上,主要包含2個方面:1)對gdb與目標結構相關的數(shù)據(jù)結構進行了擴充,使其支持多種結構;2)函數(shù)調用緊耦合部分全部改為對通用接口的調用。
2)目標抽象層:本層次對可執(zhí)行文件進行符號解析等操作,原本的gdb由于只能支持一種目標仿真器,故它只能解析與目標仿真器結構對應的文件結構,而本發(fā)明則使gdb可解析多種可執(zhí)行文件結構,如elf文件、coff文件等等。
3)仿真目標層:本層在原有gdb結構當中充當指令集仿真器,需要與gdb一同編譯,而本發(fā)明直接將本層從gdb中摳出,gdb只能訪問到通用接口,而仿真器功能及其接口的實現(xiàn)則由通用仿真核通過動態(tài)鏈接的形式提供,完成gdb對指令集仿真訪問的通用性優(yōu)化。
以上所述為對gdb的通用性優(yōu)化簡述。優(yōu)化方法以及通用框架下的目標機接口標準為本發(fā)明的一個創(chuàng)新之處,也是核心技術。
接下來在gdb的可配置框架下實現(xiàn)arm7體系結構的指令集仿真器模塊,構建arm7仿真目標機的仿真內核。
arm處理器共有37個32位寄存器,包括:31個通用寄存器,含程序計數(shù)器(pc);6個狀態(tài)寄存器,但只使用了其中的12位。這些寄存器按模式進行分組,每種模式使用自己擁有的寄存器。
arm7支持7種處理器模式,大多數(shù)應用程序在用戶模式下執(zhí)行。當處理器工作在用戶模式時,正在執(zhí)行的程序不能訪問某些被保護的系統(tǒng)資源,也不能改變模式,除非異常發(fā)生。這允許操作系統(tǒng)來控制系統(tǒng)資源的使用。除用戶模式外的其他模式稱為特權模式。特權模式可以自由地訪問系統(tǒng)資源和改變模式。
arm7指令集非常豐富,如條件執(zhí)行指令、轉移以及轉移鏈接指令、軟中斷指令、數(shù)據(jù)處理指令、乘法指令、數(shù)據(jù)傳送指令、多寄存器傳送指令等等。
本發(fā)明的仿真器就是要仿真出真實的arm7硬件環(huán)境,對其寄存器、工作模式、所有指令均進行合理完整的仿真,并以動態(tài)鏈接庫dll的形式提供。由gdb將可執(zhí)行程序文件進行符號解析,之后將代碼段、數(shù)據(jù)段等信息加載到仿真核虛擬內存中。仿真核將會在內存中進行取指,進而譯碼執(zhí)行。其過程如附圖5所示,整體的仿真流程如附圖6所示:
附圖6中表示的是正常情況下,仿真核接受到連續(xù)執(zhí)行命令的調用,進而根據(jù)當前程序計數(shù)器pc值,進行取指,譯碼執(zhí)行的情況。在上述流程中,并沒有表示程序正常退出的情況,而是只有在遇到斷點指令時才會退出仿真流程。
通常,一條指令的執(zhí)行需要幾個硬件操作,例如,讀操作數(shù)、計算結果和將結果寫回寄存器。本發(fā)明在描述指令功能時,也同樣利用了上面的特點。首先,對基本的硬件操作(如流水線)進行c語言描述。然后,在譯碼完成后,根據(jù)指令的類型選擇此指令所對應的操作,并根據(jù)操作之間的依賴關系對操作進行排序,即確定所有的操作以及它們的時間關系。
根據(jù)arm7處理器體系結構和指令集的特點,本發(fā)明確定了幾個基本的操作:
1)三級流水線的更新操作
函數(shù)定義:voidupdatepipe()
在指令執(zhí)行之前,均需要進行取指操作。由于arm7支持三級流水線,因此大多時候要執(zhí)行的指令是在流水線中的,并且,取得本次需要執(zhí)行指令之后還要更新流水線。
2)指令的條件碼判斷
函數(shù)定義:boolcharge()
指令的條件碼判斷是根據(jù)arm指令編碼中的高4位條件碼來判斷cpsr中的條件標志位決定是否執(zhí)行該指令。因為,條件碼共有16種編碼格式,因此可以定義長度為16的函數(shù)指針數(shù)組,對于每種情況均專門的函數(shù)進行判斷。此外,通過高4位的值直接定位函數(shù),能減少運行的消耗。
3)移位操作
函數(shù)定義:unit32shiftoperand(unit32,unit8)
首先判斷指令中的第二操作數(shù)的表示形式,如果是立即數(shù)方式則獲取操作數(shù)據(jù),并設置cpsr中的c條件標志;如果是寄存器形式或寄存器移位形式,則根據(jù)移位操作數(shù)選擇具體的移位函數(shù)。
4)alu操作
函數(shù)定義:基本運算
alu主要完成對二進制信息的定點算術運算、邏輯運算和各種移位操作。算術運算主要包括定點加、減、乘、除運算。邏輯運算主要有邏輯與、邏輯或、邏輯異或和邏輯非操作。移位操作主要完成邏輯左移和右移、算術左移和右移及其他一些移位操作。
5)寄存器訪問
函數(shù)定義:boolgetreg(unit32nregid,unit32*pvalue)
boolsetreg(unit32nregid,unit32nvalue)
通過特定的函數(shù)進行寄存器的讀取,直接給出寄存器號即可。這就要求仿真器事先要對所有的寄存器進行統(tǒng)一編號。
6)存儲器訪問
函數(shù)定義:boolgetmen(unit32addr,unit32nlength,
unit32*pbuff,unit32ndatasize)
boolsetmem(unit32addr,unit32nlength,
unit32*pbuff,unit32ndatasize)
通過特定函數(shù)進行內存的訪問。需要給出訪問的起始地址,數(shù)據(jù)寬度等信息。之后,函數(shù)將會把符合要求的數(shù)據(jù)存放在指定的緩沖區(qū)。
通過以上幾種基本的操作,即可以完成對大多數(shù)指令執(zhí)行邏輯的仿真。以數(shù)據(jù)處理為例,如下圖7。
同樣,仿真器中定義了各種異常模式,并設定了各種異常的向量入口地址,定義如下:
同時,還實現(xiàn)了處理各種異常的函數(shù)armul_abort(),其偽代碼實現(xiàn)如下:
為了捕捉異常,本發(fā)明在三個位置設置了異常入口。這三個位置是:
1)仿真器取指令之前:用于捕捉復位異常、快速中斷異常和一般中斷異常。
2)仿真器取指、譯碼之后,執(zhí)行之前:用于捕捉未定義指令異常和預取終止異常。
3)仿真器指令執(zhí)行中:用于捕捉軟件中斷異常和數(shù)據(jù)終止異常。
以上內容是結合具體的優(yōu)選實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本發(fā)明的保護范圍。