余梓奇,章建雄,馬 鵬,閻燕山
(1.中國(guó)電子科技集團(tuán)第三十二研究所上海201808;2.中國(guó)航空無(wú)線電電子研究所上海200241)
基于OpenOCD和DAP的嵌入式遠(yuǎn)程調(diào)試系統(tǒng)研究與設(shè)計(jì)
余梓奇1,章建雄1,馬 鵬1,閻燕山2
(1.中國(guó)電子科技集團(tuán)第三十二研究所上海201808;2.中國(guó)航空無(wú)線電電子研究所上海200241)
為了解決傳統(tǒng)調(diào)試器與自主可控芯片兼容性不強(qiáng)的問(wèn)題,文中針對(duì)自主設(shè)計(jì)的一款嵌入式CPU,分析了遠(yuǎn)程調(diào)試的原理,研究并設(shè)計(jì)了一種基于OpenOCD和DAP(調(diào)試訪問(wèn)端口)的遠(yuǎn)程調(diào)試系統(tǒng)。該系統(tǒng)通過(guò)OpenOCD向目標(biāo)芯片發(fā)送調(diào)試命令,經(jīng)過(guò)JTAG仿真器傳給目標(biāo)芯片的JTAG接口,并通過(guò)DAP生成總線事務(wù)完成調(diào)試操作。經(jīng)實(shí)際應(yīng)用表明,該系統(tǒng)支持插入斷點(diǎn)、單步執(zhí)行、讀寫(xiě)寄存器和存儲(chǔ)空間等調(diào)試功能,可作為GDB服務(wù)程序與GDB集成以實(shí)現(xiàn)更強(qiáng)大的調(diào)試功能,具有兼容性強(qiáng),穩(wěn)定性強(qiáng),可擴(kuò)展性好的特點(diǎn)。
遠(yuǎn)程調(diào)試;OpenOCD;調(diào)試訪問(wèn)端口;JTAG仿真器
嵌入式遠(yuǎn)程調(diào)試系統(tǒng)是嵌入式系統(tǒng)開(kāi)發(fā)的重要工具,可極大降低嵌入式軟件開(kāi)發(fā)的難度。嵌入式開(kāi)發(fā)中的調(diào)試工作受限于嵌入式軟件運(yùn)行的資源,不能夠直接在開(kāi)發(fā)板上運(yùn)行調(diào)試軟件,調(diào)試軟件與被調(diào)程序不得不在兩個(gè)不同的環(huán)境中運(yùn)行,因此嵌入式調(diào)試必須采用遠(yuǎn)程調(diào)試的方式,也稱交叉調(diào)試[1],被調(diào)軟件和調(diào)試器之間一般通過(guò)并口、USB接口或者網(wǎng)絡(luò)接口連接。
國(guó)外在嵌入式調(diào)試器方面一直領(lǐng)先,國(guó)內(nèi)普遍采用國(guó)外的工具,價(jià)格比較昂貴,而適配自主可控的國(guó)產(chǎn)芯片的調(diào)試系統(tǒng)相對(duì)缺乏,這就對(duì)嵌入式開(kāi)發(fā)環(huán)境提出了新的要求,因此文中針對(duì)自主設(shè)計(jì)的嵌入式CPU研究并設(shè)計(jì)了一種基于OpenOCD和DAP的遠(yuǎn)程調(diào)試系統(tǒng),以適應(yīng)目前嵌入式開(kāi)發(fā)的需求。該調(diào)試系統(tǒng)可適用于沒(méi)有操作系統(tǒng)的目標(biāo)機(jī),通過(guò)OpenOCD向目標(biāo)芯片發(fā)送調(diào)試命令,目標(biāo)芯片的DAP收到命令并發(fā)出總線事務(wù)實(shí)現(xiàn)對(duì)CPU和外圍設(shè)備的訪問(wèn)。
本遠(yuǎn)程調(diào)試系統(tǒng)包括的部件有:GDB、OpenOCD、JTAG仿真器和目標(biāo)機(jī)調(diào)試訪問(wèn)端口。系統(tǒng)架構(gòu)如圖1所示。其中OpenOCD和GDB運(yùn)行在宿主機(jī)端,JTAG仿真器連接宿主機(jī)和目標(biāo)機(jī),目標(biāo)機(jī)調(diào)試訪問(wèn)端口DAP解析收到的調(diào)試命令,控制處理器執(zhí)行調(diào)試操作。本系統(tǒng)實(shí)現(xiàn)的關(guān)鍵在于設(shè)計(jì)了獨(dú)立的DAP以及在OpenOCD中設(shè)計(jì)了符合目標(biāo)芯片的調(diào)試特性的接口函數(shù)。
圖1 遠(yuǎn)程調(diào)試系統(tǒng)架構(gòu)
OpenOCD(Open On-Chip Debugger)是一個(gè)開(kāi)源的通用上位機(jī)調(diào)試軟件,與GNU GCC工具鏈聯(lián)合作為多種嵌入式目標(biāo)系統(tǒng)的調(diào)試器所用,支持所有系列的ARM處理器以及MIPS和FPGA等核心的芯片,也支持眾多商用的JTAG仿真適配器[2]。由于OpenOCD的開(kāi)源性,可根據(jù)不同的目標(biāo)芯片改寫(xiě)相應(yīng)的操作函數(shù)以適配各個(gè)芯片,使得基于OpenOCD搭建的調(diào)試系統(tǒng)具有兼容性強(qiáng),可擴(kuò)展好的特性[3]。OpenOCD相較于其他調(diào)試器的優(yōu)勢(shì)在于,可以直接讀寫(xiě)物理地址和核內(nèi)部寄存器,更接近硬件層面,對(duì)于測(cè)試硬件設(shè)計(jì)有不小幫助[4];
大多數(shù)仿真器都由一個(gè)位于主機(jī)和被調(diào)試系統(tǒng)之間的硬件電路組成。一端通過(guò)USB接口與主機(jī)端連接,另一端通過(guò)JTAG接口與目標(biāo)板上的微處理器的調(diào)試電路連接。
仿真器中主要部分為USB協(xié)議棧,以及JTAG接口。JTAG仿真器接收到宿主機(jī)通信端口發(fā)出的信號(hào)后,將其轉(zhuǎn)換成標(biāo)準(zhǔn)的JTAG信號(hào)發(fā)給目標(biāo)機(jī)JTAG接收端,目標(biāo)機(jī)完成指定的調(diào)試操作后再將結(jié)果反饋給宿主機(jī)[5]。
調(diào)試訪問(wèn)端口DAP(Debug Access Port)主要由調(diào)試端口(DP)和訪問(wèn)端口(AP)兩部分組成。DAP作為一個(gè)整體的本質(zhì)作用是將JTAG接口傳來(lái)的數(shù)據(jù)翻譯成不同的系統(tǒng)總線事務(wù)[6]。JTAG-DP接收到JTAG信號(hào),經(jīng)過(guò)DAP內(nèi)部總線控制訪問(wèn)端口AP;通過(guò)AHB-AP可以訪問(wèn)到掛載在AHB總線上的所有從設(shè)備;APB-AP僅能訪問(wèn)與Debug APB連接的處理器核,通過(guò)訪問(wèn)處理器核中的Debug邏輯實(shí)現(xiàn)調(diào)試操作[7]。DP和AP內(nèi)部也有相應(yīng)的控制寄存器,主機(jī)端的調(diào)試器可以獨(dú)立地訪問(wèn)這些寄存器,以獲取DAP的運(yùn)行情況,且不干擾目標(biāo)芯片的運(yùn)行。
GDB作為GNU開(kāi)源組織下的一個(gè)調(diào)試工具,具備其他商用調(diào)試器的所有功能。GDB遠(yuǎn)程調(diào)試的基本原理是通過(guò) RSP(Remote Serial Protocol)協(xié)議實(shí)現(xiàn)調(diào)試功能。RSP協(xié)議定義了消息的讀寫(xiě)格式,控制應(yīng)用程序的調(diào)試以及相應(yīng)狀態(tài)[8]。GDB在此系統(tǒng)中不是必須的,根據(jù)實(shí)際調(diào)試需求而定。OpenOCD與GDB聯(lián)合使用時(shí)可視作一種GDB Server[9]。
本節(jié)詳細(xì)介紹本遠(yuǎn)程調(diào)試系統(tǒng)中調(diào)試訪問(wèn)端口和OpenOCD調(diào)試函數(shù)的具體設(shè)計(jì)實(shí)現(xiàn)。
DAP由調(diào)試端口DP和訪問(wèn)端口AP組成。數(shù)據(jù)流經(jīng)DP傳給AP,最后流向待訪問(wèn)的調(diào)試資源。DAP結(jié)構(gòu)圖如圖2所示。
圖2 DAP結(jié)構(gòu)圖
調(diào)試端口JTAG-DP可以分成TAP控制器、掃描鏈、指令系統(tǒng)3個(gè)部分[10]。TAP控制器事實(shí)上是一個(gè)有限狀態(tài)機(jī),由輸入信號(hào)TMS和時(shí)鐘TCK控制狀態(tài)機(jī)的運(yùn)行,提供控制信息。JTAG-DP內(nèi)部包括兩大類(lèi)掃描鏈:指令掃描鏈(IR scan chain)和數(shù)據(jù)掃描鏈(DR scan chain)。根據(jù)狀態(tài)機(jī)的不同狀態(tài)首先指定指令或數(shù)據(jù)寄存器組,然后控制寄存器組的捕獲、移位、更新等操作。如表1所示定義了5種JTGA指令。如果是DPACC或APACC指令,接下來(lái)則換到數(shù)據(jù)掃描鏈,數(shù)據(jù)經(jīng)TDI移入數(shù)據(jù)寄存器,寫(xiě)數(shù)據(jù)在更新?tīng)顟B(tài)發(fā)出,讀數(shù)據(jù)則在下一次的捕獲狀態(tài)讀取,經(jīng)TDO讀出。
表1 JTAG指令
訪問(wèn)端口AHB-AP和APB-AP內(nèi)部分為主從端,Slave端負(fù)責(zé)接收DP傳來(lái)的命令和數(shù)據(jù),Master端負(fù)責(zé)產(chǎn)生相應(yīng)的總線事務(wù)[11]。本系統(tǒng)設(shè)計(jì)APBAP與Debug APB總線相連,可訪問(wèn)到核內(nèi)的調(diào)試資源,控制CPU運(yùn)行或插入硬件斷點(diǎn)和觀察點(diǎn);AHBAP與AHB總線相連,可以訪問(wèn)到所有掛載在AHB總線上的外設(shè)。由于對(duì)核的訪問(wèn)和對(duì)外設(shè)的訪問(wèn)是通過(guò)不同的線路進(jìn)行,故該調(diào)試系統(tǒng)可以實(shí)現(xiàn)訪問(wèn)外設(shè)而不影響核內(nèi)指令的正常運(yùn)行。
調(diào)試器對(duì)DAP的訪問(wèn)可分為三級(jí)[12]:對(duì)DP的訪問(wèn),對(duì)AP的訪問(wèn)和對(duì)系統(tǒng)資源的訪問(wèn)。這三級(jí)是遞進(jìn)的關(guān)系,要想訪問(wèn)系統(tǒng)資源,必須先訪問(wèn)DP和AP。三級(jí)訪問(wèn)結(jié)構(gòu)如圖3所示。首先訪問(wèn)DP,配置APSEL寄存器指定要訪問(wèn)的AP寄存器;再訪問(wèn)AP的Bank0中的寄存器TAR和DRW,分別指定要訪問(wèn)系統(tǒng)資源的地址和讀寫(xiě)數(shù)據(jù);最后AP發(fā)出相應(yīng)的總線事務(wù),完成對(duì)調(diào)試資源的訪問(wèn)??梢耘渲肁P中的CSW寄存器選擇訪問(wèn)模式,例如要連續(xù)訪問(wèn)一段地址,可以使用地址自增模式,每完成一次讀寫(xiě)訪問(wèn)便將AP-TAR中的地址加4,這樣每次只需操作DP訪問(wèn)一次AP-TAR,不用重新寫(xiě)值改變地址。通過(guò)這三級(jí)訪問(wèn)最終實(shí)現(xiàn)嵌入式系統(tǒng)的調(diào)試和對(duì)DAP本身的控制。
為了能夠控制處理器的狀態(tài),設(shè)計(jì)DAP以存儲(chǔ)空間映射(Memory map)的方式訪問(wèn)處理器核的調(diào)試接口[13]。核中的調(diào)試相關(guān)寄存器映射到Debug APB上的4KB地址空間。向APB-AP TAR寄存器中寫(xiě)入相應(yīng)地址即可訪問(wèn)到調(diào)試寄存器。
基于OpenOCD的開(kāi)源性,可以根據(jù)不同的目標(biāo)芯片進(jìn)行定制設(shè)計(jì)和裁剪。OpenOCD可主要分為GDB服務(wù)模塊、DAP訪問(wèn)模塊和目標(biāo)芯片調(diào)試模塊這樣三個(gè)模塊。另外還有JTAG仿真器驅(qū)動(dòng)模塊,主要是調(diào)用現(xiàn)有的libusb庫(kù)函數(shù)根據(jù)不同仿真器的特性來(lái)驅(qū)動(dòng)USB接口,進(jìn)而驅(qū)動(dòng)JTAG仿真器[14],這里不再贅述。下面介紹主要功能模塊的設(shè)計(jì)原理。
圖3 DAP三級(jí)訪問(wèn)結(jié)構(gòu)示意圖
GDB服務(wù)模塊類(lèi)似于GDB Server,主要包括3個(gè)子模塊[15]:1)通信連接模塊,作為GDB與OpenOCD中間的橋梁,實(shí)現(xiàn)兩者的通信。GDB服務(wù)模塊啟動(dòng)后,將調(diào)用一個(gè)線程監(jiān)聽(tīng)通信連接,當(dāng)GDB發(fā)起連接時(shí),將通知后續(xù)模塊建立調(diào)試連接;2)事件監(jiān)聽(tīng)模塊,循環(huán)監(jiān)聽(tīng)調(diào)試事件并跟蹤某個(gè)進(jìn)程的進(jìn)行;3)命令解析模塊,解析RSP包的格式,提取調(diào)試命令內(nèi)容交給OpenOCD執(zhí)行,收到返回?cái)?shù)據(jù)后再封裝成RSP數(shù)據(jù)包。
DAP訪問(wèn)模塊根據(jù)上一節(jié)提到的DAP三級(jí)訪問(wèn)原理,實(shí)現(xiàn)了掃描鏈的驅(qū)動(dòng),DAP寄存器的訪問(wèn),依據(jù)不同的上層調(diào)試操作選擇不同的AP訪問(wèn)系統(tǒng)資源。如圖4所示是DAP的訪問(wèn)流程圖。該模塊具體分為兩部分:1)JTAG協(xié)議模塊,實(shí)現(xiàn)TAP狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換,根據(jù)配置文件中對(duì)時(shí)鐘的設(shè)置改變TCK的速度,在每個(gè)TCK節(jié)拍到來(lái)時(shí),指定TMS完成狀態(tài)跳轉(zhuǎn)。設(shè)計(jì)jtag_ir_scan()和jtag_dr_scan()函數(shù)實(shí)現(xiàn)JTAG指令的選擇和數(shù)據(jù)掃描鏈的移位;2)DAP協(xié)議模塊,分析調(diào)試操作模塊的不同命令,首先調(diào)用jtag_ir_scan()函 數(shù) 指 定 DP操 作 為 DPACC或APACC,接著調(diào)用jtag_dr_scan()函數(shù)載入數(shù)據(jù)選擇AP和指定讀寫(xiě)操作。訪問(wèn)結(jié)束后調(diào)用jtagdp_transaction_endcheck()函數(shù)檢查訪問(wèn)是否正常,主要根據(jù)數(shù)據(jù)掃描鏈后3位的值,查看當(dāng)前DPCTRL/STAT的OVERRUN和STICKYERR位是否置1,如果不正常就嘗試重新訪問(wèn)并向上層反饋錯(cuò)誤代號(hào)。
圖4 DAP訪問(wèn)流程
根據(jù)目標(biāo)處理器的類(lèi)型,本模塊設(shè)計(jì)實(shí)現(xiàn)的是通過(guò)調(diào)用DAP訪問(wèn)模塊中的函數(shù),訪問(wèn)處理器中DEBUG相關(guān)寄存器和外設(shè)資源,實(shí)現(xiàn)讓目標(biāo)處理器執(zhí)行具體調(diào)試操作。下面重點(diǎn)討論各項(xiàng)功能的實(shí)現(xiàn)。
1)停止運(yùn)行:控制CPU停止運(yùn)行當(dāng)前指令,進(jìn)入調(diào)試狀態(tài),首先向DRCR_HALTREQ位寫(xiě)1發(fā)出停止請(qǐng)求,該操作會(huì)產(chǎn)生調(diào)試請(qǐng)求異常,使CPU保存現(xiàn)場(chǎng)。接著寫(xiě)DSCR_ITRen位寫(xiě)1使能ITR功能,以便在后續(xù)的調(diào)試操作中向CPU發(fā)送指令。讀DSCR字獲取當(dāng)前CPU狀態(tài),DSCR_HALTED位為1說(shuō)明CPU已經(jīng)停止進(jìn)入調(diào)試狀態(tài)。
2)插入斷點(diǎn):斷點(diǎn)是調(diào)試器控制目標(biāo)程序執(zhí)行的基本手段。這里斷點(diǎn)分為軟斷點(diǎn)和硬斷點(diǎn),軟斷點(diǎn)是將待插入斷點(diǎn)處的機(jī)器碼換成特殊的BKPT指令,當(dāng)CPU執(zhí)行到這條指令時(shí)會(huì)產(chǎn)生斷點(diǎn)異常使CPU進(jìn)入調(diào)試狀態(tài);硬斷點(diǎn)是通過(guò)向BVR中寫(xiě)待插入斷點(diǎn)的地址,CPU每次執(zhí)行指令前會(huì)將PC與BVR比較,地址匹配便產(chǎn)生斷點(diǎn)異常,打斷這條指令的執(zhí)行,使CPU直接進(jìn)入調(diào)試狀態(tài)。從速度上講,設(shè)置硬件斷點(diǎn)更快。
3)單步執(zhí)行:實(shí)際上是一個(gè)刪除斷點(diǎn)——插入斷點(diǎn)——恢復(fù)執(zhí)行的過(guò)程。首先刪除當(dāng)前停止位置的斷點(diǎn),再向下一條指令位置處插入新的斷點(diǎn),然后恢復(fù)執(zhí)行,CPU執(zhí)行完當(dāng)前指令會(huì)觸發(fā)下條指令的斷點(diǎn)。
4)恢復(fù)執(zhí)行:恢復(fù)CPU運(yùn)行指令,離開(kāi)調(diào)試狀態(tài)。和停止運(yùn)行操作相似,首先向DSCR_ITRen位寫(xiě)零關(guān)閉ITR功能,再DRCR_RESTART位寫(xiě)1發(fā)出重新運(yùn)行請(qǐng)求,控制CPU恢復(fù)現(xiàn)場(chǎng)。如果沒(méi)有指定恢復(fù)執(zhí)行的地址,則在當(dāng)前PC處開(kāi)始執(zhí)行,如果指定了地址,在離開(kāi)調(diào)試功能前會(huì)向PC寫(xiě)入新地址,控制CPU從這里開(kāi)始執(zhí)行。
5)讀寫(xiě)調(diào)試資源:分兩種情況,如果訪問(wèn)CPU內(nèi)的寄存器是通過(guò)ITR執(zhí)行相應(yīng)指令,再通過(guò)RX、TX完成數(shù)據(jù)傳輸。如果訪問(wèn)CPU外的存儲(chǔ)空間是直接通過(guò)AHB總線訪問(wèn)。
OpenOCD可以與GDB協(xié)同工作,接收GDB發(fā)送來(lái)的命令傳給目標(biāo)機(jī)。相對(duì)OpenOCD的調(diào)試操作,GDB提供了更強(qiáng)大并更“上層”的調(diào)試功能。GDB可以直接面向源碼級(jí)調(diào)試,可以針對(duì)函數(shù)名或語(yǔ)句行號(hào)插入斷點(diǎn),并以語(yǔ)句單步執(zhí)行[16]。在GDB環(huán)境中輸入target remote localhost:3333命令即可與OpenOCD建立連接,端口號(hào)可以在目標(biāo)芯片配置文件中修改。連接成功后使用load命令載入待調(diào)程序。與調(diào)試本地程序不同,遠(yuǎn)程調(diào)試是通過(guò)“c”命令而不是“r”命令使待調(diào)程序開(kāi)始執(zhí)行。其他命令與本地調(diào)試類(lèi)似,所以對(duì)于熟悉GDB操作的開(kāi)發(fā)人員,可以使用GDB配合OpenOCD高效地調(diào)試嵌入式軟件程序。
文中針對(duì)自主設(shè)計(jì)地嵌入式CPU,選用J-link作為JTAG仿真器,在ubuntu系統(tǒng)上啟動(dòng)OpenOCD,向目標(biāo)芯片發(fā)送調(diào)試命令。測(cè)試過(guò)程為首先向芯片下載一個(gè)根據(jù)U-boot裁剪的boot程序,然后在該程序所在內(nèi)存處的的不同位置插入斷點(diǎn),觀察程序執(zhí)行情況。
OpenOCD連接成功后首先讀取JTAG仿真器和DAP的相關(guān)信息,以比較是否和配置文件中聲明的相同,同時(shí)還讀取了核中的調(diào)試寄存器,獲取芯片信息,如支持的硬件斷點(diǎn)和觀察點(diǎn)個(gè)數(shù)。
使用halt命令使處理器停止運(yùn)行后即表示進(jìn)入調(diào)試狀態(tài),使用load_image命令下載程序到指定地址并改變PC指針到指定地址開(kāi)始執(zhí)行。通過(guò)bp命令插入斷點(diǎn),處理器執(zhí)行到斷點(diǎn)處停止執(zhí)行,可以看到停止時(shí)的狀態(tài)信息。單步step操作執(zhí)行到下條指令再恢復(fù)運(yùn)行。程序最后停止在0x00200380處,這與boot程序的最后一條指令地址一樣,說(shuō)明處理器執(zhí)行完了該程序的所有指令,操作過(guò)程如圖5所示。
圖5 OpenOCD操作過(guò)程
當(dāng)前我國(guó)在嵌入式軟件開(kāi)發(fā)中所使用的調(diào)試工具多為國(guó)外產(chǎn)品,價(jià)格昂貴,不利于推廣。本文研究了嵌入式系統(tǒng)遠(yuǎn)程調(diào)試技術(shù),自主研發(fā)的嵌入式處理器設(shè)計(jì)了專門(mén)的DAP模塊,在調(diào)試器OpenOCD的基礎(chǔ)上設(shè)計(jì)了相應(yīng)的調(diào)試操作函數(shù)接口,實(shí)現(xiàn)了高效穩(wěn)定的遠(yuǎn)程調(diào)試系統(tǒng)。本文提出的遠(yuǎn)程調(diào)試設(shè)計(jì)方法對(duì)其他嵌入式調(diào)試系統(tǒng)設(shè)計(jì)具有一定參考價(jià)值。
[1]馬艷.基于事件循環(huán)機(jī)制的嵌入式應(yīng)用級(jí)交叉調(diào)試器的研究[D].武漢:華中科技大學(xué),2013.
[2] Wootton C.DebuggingYourApplication[C]//Beginning Samsung ARTIK.Apress,2016:325-331.
[3]黃子晨,李德華.基于OpenOCD和JTAG的嵌入式交叉開(kāi)發(fā)環(huán)境[J].儀器儀表用戶,2012,18(2):470-478.
[4]Mike Anderson.Using OpenOCD JTAG in Android Kernel Debugging:Making Android Driver Work-(PPT)[C]//Embeded systems conference 2013,San Jose,California,USA:ESC Silicon Valley,2013.
[5]吳亞杰.基于EJTAG的OCD調(diào)試方案的研究與實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2012.
[6]徐文昌.SoC調(diào)試跟蹤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2013.
[7]張鵬,樊曉椏,黃小平.基于總線訪問(wèn)的片上調(diào)試方法研究[J].計(jì)算機(jī)測(cè)量與控制,2014(2):510-512,518.
[8]況陽(yáng).支持USB的嵌入式軟件遠(yuǎn)程調(diào)試器的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011.
[9]Beneder R,Kramer M,Brejcha P.A two stage approach for a cost-effective and versatile debugging unit and starter platform[C]//Mechatronics and Embedded Systems and Applications(MESA),2012 IEEE/ASME International Conference on.IEEE,2012:330-335.
[10]劉慧.基于SOC嵌入式處理器調(diào)試系統(tǒng)的開(kāi)發(fā)與研究[D].武漢:武漢紡織大學(xué),2013.
[11]Joseph Yiu.ARM Cortex-M3權(quán)威指南[M].姚文祥.北京:清華大學(xué)出版社,2014.
[12]Esliger J L,F(xiàn)oley D.Integrated circuit with secure boot from a debug access port and method therefor:U.S.Patent 8,156,317[P].2012-4-10.
[13]王哲宇.基于CoreSight接口的ARM跨平臺(tái)調(diào)試系統(tǒng)的研究與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2015.
[14]Beneder R.Development of an OpenOCD compatible Debugger for ARM-CMARMJTAG[D].University of Applied Sciences Technikum Wien,2011.
[15]殷紹劍,雷航,詹瑾瑜.嵌入式遠(yuǎn)程調(diào)試原理研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2014(6):240-243.
[16]任艷偉.基于acoral操作系統(tǒng)的調(diào)試器的研究與設(shè)計(jì)[D].成都:電子科技大學(xué),2012.
Research and design of embedded remote debugging system based on OpenOCD and DAP
YU Zi?qi1,ZHANG Jian?xiong1,MA Peng1,YAN Yan?shan2
(1.The32nd Research Institute of China Electronics Technology Group Corporation,Shanghai201808,China;2.China Aviation Radio Electronics Research Institute,Shanghai200241,China)
In order to solve the problem of the compatibility between the traditional debugger and selfcontrollable chip.In view of the self-designed embedded CPU,this paper analyzes the principle of remote debugging,researches and designs a remote debugging system based on OpenOCD and DAP(debug access port).The system sends the debug command to the target chip through OpenOCD,these commands are sent to the JTAG port of the target chip by JTAG emulator and completes the debug operation through DAP generating bus transaction.The experiment and application show that this system supports insertion breakpoints,single-step execution,read or write registers and storage space and other functions,the system also can integrate with GDB as GDB server program to achieve more powerful debugging features,with strong compatibility,strong stability,good scalability.
remote debugging;OpenOCD;debug access port;JTAG emulator
TP302.1
A
1674-6236(2017)22-0149-05
2016-10-23稿件編號(hào):201610134
余梓奇(1992—),男,湖北武漢人,碩士研究生。研究方向:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、數(shù)字系統(tǒng)設(shè)計(jì)。