999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenOCD和DAP的嵌入式遠程調試系統研究與設計

2017-12-01 00:33:28余梓奇章建雄閻燕山
電子設計工程 2017年22期
關鍵詞:嵌入式指令調試

余梓奇,章建雄,馬 鵬,閻燕山

(1.中國電子科技集團第三十二研究所上海201808;2.中國航空無線電電子研究所上海200241)

基于OpenOCD和DAP的嵌入式遠程調試系統研究與設計

余梓奇1,章建雄1,馬 鵬1,閻燕山2

(1.中國電子科技集團第三十二研究所上海201808;2.中國航空無線電電子研究所上海200241)

為了解決傳統調試器與自主可控芯片兼容性不強的問題,文中針對自主設計的一款嵌入式CPU,分析了遠程調試的原理,研究并設計了一種基于OpenOCD和DAP(調試訪問端口)的遠程調試系統。該系統通過OpenOCD向目標芯片發送調試命令,經過JTAG仿真器傳給目標芯片的JTAG接口,并通過DAP生成總線事務完成調試操作。經實際應用表明,該系統支持插入斷點、單步執行、讀寫寄存器和存儲空間等調試功能,可作為GDB服務程序與GDB集成以實現更強大的調試功能,具有兼容性強,穩定性強,可擴展性好的特點。

遠程調試;OpenOCD;調試訪問端口;JTAG仿真器

嵌入式遠程調試系統是嵌入式系統開發的重要工具,可極大降低嵌入式軟件開發的難度。嵌入式開發中的調試工作受限于嵌入式軟件運行的資源,不能夠直接在開發板上運行調試軟件,調試軟件與被調程序不得不在兩個不同的環境中運行,因此嵌入式調試必須采用遠程調試的方式,也稱交叉調試[1],被調軟件和調試器之間一般通過并口、USB接口或者網絡接口連接。

國外在嵌入式調試器方面一直領先,國內普遍采用國外的工具,價格比較昂貴,而適配自主可控的國產芯片的調試系統相對缺乏,這就對嵌入式開發環境提出了新的要求,因此文中針對自主設計的嵌入式CPU研究并設計了一種基于OpenOCD和DAP的遠程調試系統,以適應目前嵌入式開發的需求。該調試系統可適用于沒有操作系統的目標機,通過OpenOCD向目標芯片發送調試命令,目標芯片的DAP收到命令并發出總線事務實現對CPU和外圍設備的訪問。

1 遠程調試系統結構

本遠程調試系統包括的部件有:GDB、OpenOCD、JTAG仿真器和目標機調試訪問端口。系統架構如圖1所示。其中OpenOCD和GDB運行在宿主機端,JTAG仿真器連接宿主機和目標機,目標機調試訪問端口DAP解析收到的調試命令,控制處理器執行調試操作。本系統實現的關鍵在于設計了獨立的DAP以及在OpenOCD中設計了符合目標芯片的調試特性的接口函數。

圖1 遠程調試系統架構

1.1 OpenOCD

OpenOCD(Open On-Chip Debugger)是一個開源的通用上位機調試軟件,與GNU GCC工具鏈聯合作為多種嵌入式目標系統的調試器所用,支持所有系列的ARM處理器以及MIPS和FPGA等核心的芯片,也支持眾多商用的JTAG仿真適配器[2]。由于OpenOCD的開源性,可根據不同的目標芯片改寫相應的操作函數以適配各個芯片,使得基于OpenOCD搭建的調試系統具有兼容性強,可擴展好的特性[3]。OpenOCD相較于其他調試器的優勢在于,可以直接讀寫物理地址和核內部寄存器,更接近硬件層面,對于測試硬件設計有不小幫助[4];

1.2 JTAG仿真器

大多數仿真器都由一個位于主機和被調試系統之間的硬件電路組成。一端通過USB接口與主機端連接,另一端通過JTAG接口與目標板上的微處理器的調試電路連接。

仿真器中主要部分為USB協議棧,以及JTAG接口。JTAG仿真器接收到宿主機通信端口發出的信號后,將其轉換成標準的JTAG信號發給目標機JTAG接收端,目標機完成指定的調試操作后再將結果反饋給宿主機[5]。

1.3 調試訪問端口

調試訪問端口DAP(Debug Access Port)主要由調試端口(DP)和訪問端口(AP)兩部分組成。DAP作為一個整體的本質作用是將JTAG接口傳來的數據翻譯成不同的系統總線事務[6]。JTAG-DP接收到JTAG信號,經過DAP內部總線控制訪問端口AP;通過AHB-AP可以訪問到掛載在AHB總線上的所有從設備;APB-AP僅能訪問與Debug APB連接的處理器核,通過訪問處理器核中的Debug邏輯實現調試操作[7]。DP和AP內部也有相應的控制寄存器,主機端的調試器可以獨立地訪問這些寄存器,以獲取DAP的運行情況,且不干擾目標芯片的運行。

1.4 GDB

GDB作為GNU開源組織下的一個調試工具,具備其他商用調試器的所有功能。GDB遠程調試的基本原理是通過 RSP(Remote Serial Protocol)協議實現調試功能。RSP協議定義了消息的讀寫格式,控制應用程序的調試以及相應狀態[8]。GDB在此系統中不是必須的,根據實際調試需求而定。OpenOCD與GDB聯合使用時可視作一種GDB Server[9]。

2 調試系統設計實現

本節詳細介紹本遠程調試系統中調試訪問端口和OpenOCD調試函數的具體設計實現。

2.1 DAP設計原理

DAP由調試端口DP和訪問端口AP組成。數據流經DP傳給AP,最后流向待訪問的調試資源。DAP結構圖如圖2所示。

圖2 DAP結構圖

調試端口JTAG-DP可以分成TAP控制器、掃描鏈、指令系統3個部分[10]。TAP控制器事實上是一個有限狀態機,由輸入信號TMS和時鐘TCK控制狀態機的運行,提供控制信息。JTAG-DP內部包括兩大類掃描鏈:指令掃描鏈(IR scan chain)和數據掃描鏈(DR scan chain)。根據狀態機的不同狀態首先指定指令或數據寄存器組,然后控制寄存器組的捕獲、移位、更新等操作。如表1所示定義了5種JTGA指令。如果是DPACC或APACC指令,接下來則換到數據掃描鏈,數據經TDI移入數據寄存器,寫數據在更新狀態發出,讀數據則在下一次的捕獲狀態讀取,經TDO讀出。

表1 JTAG指令

訪問端口AHB-AP和APB-AP內部分為主從端,Slave端負責接收DP傳來的命令和數據,Master端負責產生相應的總線事務[11]。本系統設計APBAP與Debug APB總線相連,可訪問到核內的調試資源,控制CPU運行或插入硬件斷點和觀察點;AHBAP與AHB總線相連,可以訪問到所有掛載在AHB總線上的外設。由于對核的訪問和對外設的訪問是通過不同的線路進行,故該調試系統可以實現訪問外設而不影響核內指令的正常運行。

調試器對DAP的訪問可分為三級[12]:對DP的訪問,對AP的訪問和對系統資源的訪問。這三級是遞進的關系,要想訪問系統資源,必須先訪問DP和AP。三級訪問結構如圖3所示。首先訪問DP,配置APSEL寄存器指定要訪問的AP寄存器;再訪問AP的Bank0中的寄存器TAR和DRW,分別指定要訪問系統資源的地址和讀寫數據;最后AP發出相應的總線事務,完成對調試資源的訪問。可以配置AP中的CSW寄存器選擇訪問模式,例如要連續訪問一段地址,可以使用地址自增模式,每完成一次讀寫訪問便將AP-TAR中的地址加4,這樣每次只需操作DP訪問一次AP-TAR,不用重新寫值改變地址。通過這三級訪問最終實現嵌入式系統的調試和對DAP本身的控制。

為了能夠控制處理器的狀態,設計DAP以存儲空間映射(Memory map)的方式訪問處理器核的調試接口[13]。核中的調試相關寄存器映射到Debug APB上的4KB地址空間。向APB-AP TAR寄存器中寫入相應地址即可訪問到調試寄存器。

2.2 OpenOCD設計原理

基于OpenOCD的開源性,可以根據不同的目標芯片進行定制設計和裁剪。OpenOCD可主要分為GDB服務模塊、DAP訪問模塊和目標芯片調試模塊這樣三個模塊。另外還有JTAG仿真器驅動模塊,主要是調用現有的libusb庫函數根據不同仿真器的特性來驅動USB接口,進而驅動JTAG仿真器[14],這里不再贅述。下面介紹主要功能模塊的設計原理。

圖3 DAP三級訪問結構示意圖

2.2.1 GDB服務模塊

GDB服務模塊類似于GDB Server,主要包括3個子模塊[15]:1)通信連接模塊,作為GDB與OpenOCD中間的橋梁,實現兩者的通信。GDB服務模塊啟動后,將調用一個線程監聽通信連接,當GDB發起連接時,將通知后續模塊建立調試連接;2)事件監聽模塊,循環監聽調試事件并跟蹤某個進程的進行;3)命令解析模塊,解析RSP包的格式,提取調試命令內容交給OpenOCD執行,收到返回數據后再封裝成RSP數據包。

2.2.2 DAP訪問模塊

DAP訪問模塊根據上一節提到的DAP三級訪問原理,實現了掃描鏈的驅動,DAP寄存器的訪問,依據不同的上層調試操作選擇不同的AP訪問系統資源。如圖4所示是DAP的訪問流程圖。該模塊具體分為兩部分:1)JTAG協議模塊,實現TAP狀態機的狀態轉換,根據配置文件中對時鐘的設置改變TCK的速度,在每個TCK節拍到來時,指定TMS完成狀態跳轉。設計jtag_ir_scan()和jtag_dr_scan()函數實現JTAG指令的選擇和數據掃描鏈的移位;2)DAP協議模塊,分析調試操作模塊的不同命令,首先調用jtag_ir_scan()函 數 指 定 DP操 作 為 DPACC或APACC,接著調用jtag_dr_scan()函數載入數據選擇AP和指定讀寫操作。訪問結束后調用jtagdp_transaction_endcheck()函數檢查訪問是否正常,主要根據數據掃描鏈后3位的值,查看當前DPCTRL/STAT的OVERRUN和STICKYERR位是否置1,如果不正常就嘗試重新訪問并向上層反饋錯誤代號。

圖4 DAP訪問流程

2.2.3 目標芯片調試模塊設計

根據目標處理器的類型,本模塊設計實現的是通過調用DAP訪問模塊中的函數,訪問處理器中DEBUG相關寄存器和外設資源,實現讓目標處理器執行具體調試操作。下面重點討論各項功能的實現。

1)停止運行:控制CPU停止運行當前指令,進入調試狀態,首先向DRCR_HALTREQ位寫1發出停止請求,該操作會產生調試請求異常,使CPU保存現場。接著寫DSCR_ITRen位寫1使能ITR功能,以便在后續的調試操作中向CPU發送指令。讀DSCR字獲取當前CPU狀態,DSCR_HALTED位為1說明CPU已經停止進入調試狀態。

2)插入斷點:斷點是調試器控制目標程序執行的基本手段。這里斷點分為軟斷點和硬斷點,軟斷點是將待插入斷點處的機器碼換成特殊的BKPT指令,當CPU執行到這條指令時會產生斷點異常使CPU進入調試狀態;硬斷點是通過向BVR中寫待插入斷點的地址,CPU每次執行指令前會將PC與BVR比較,地址匹配便產生斷點異常,打斷這條指令的執行,使CPU直接進入調試狀態。從速度上講,設置硬件斷點更快。

3)單步執行:實際上是一個刪除斷點——插入斷點——恢復執行的過程。首先刪除當前停止位置的斷點,再向下一條指令位置處插入新的斷點,然后恢復執行,CPU執行完當前指令會觸發下條指令的斷點。

4)恢復執行:恢復CPU運行指令,離開調試狀態。和停止運行操作相似,首先向DSCR_ITRen位寫零關閉ITR功能,再DRCR_RESTART位寫1發出重新運行請求,控制CPU恢復現場。如果沒有指定恢復執行的地址,則在當前PC處開始執行,如果指定了地址,在離開調試功能前會向PC寫入新地址,控制CPU從這里開始執行。

5)讀寫調試資源:分兩種情況,如果訪問CPU內的寄存器是通過ITR執行相應指令,再通過RX、TX完成數據傳輸。如果訪問CPU外的存儲空間是直接通過AHB總線訪問。

2.3 集成GDB

OpenOCD可以與GDB協同工作,接收GDB發送來的命令傳給目標機。相對OpenOCD的調試操作,GDB提供了更強大并更“上層”的調試功能。GDB可以直接面向源碼級調試,可以針對函數名或語句行號插入斷點,并以語句單步執行[16]。在GDB環境中輸入target remote localhost:3333命令即可與OpenOCD建立連接,端口號可以在目標芯片配置文件中修改。連接成功后使用load命令載入待調程序。與調試本地程序不同,遠程調試是通過“c”命令而不是“r”命令使待調程序開始執行。其他命令與本地調試類似,所以對于熟悉GDB操作的開發人員,可以使用GDB配合OpenOCD高效地調試嵌入式軟件程序。

3 測試結果

文中針對自主設計地嵌入式CPU,選用J-link作為JTAG仿真器,在ubuntu系統上啟動OpenOCD,向目標芯片發送調試命令。測試過程為首先向芯片下載一個根據U-boot裁剪的boot程序,然后在該程序所在內存處的的不同位置插入斷點,觀察程序執行情況。

OpenOCD連接成功后首先讀取JTAG仿真器和DAP的相關信息,以比較是否和配置文件中聲明的相同,同時還讀取了核中的調試寄存器,獲取芯片信息,如支持的硬件斷點和觀察點個數。

使用halt命令使處理器停止運行后即表示進入調試狀態,使用load_image命令下載程序到指定地址并改變PC指針到指定地址開始執行。通過bp命令插入斷點,處理器執行到斷點處停止執行,可以看到停止時的狀態信息。單步step操作執行到下條指令再恢復運行。程序最后停止在0x00200380處,這與boot程序的最后一條指令地址一樣,說明處理器執行完了該程序的所有指令,操作過程如圖5所示。

圖5 OpenOCD操作過程

4 結 論

當前我國在嵌入式軟件開發中所使用的調試工具多為國外產品,價格昂貴,不利于推廣。本文研究了嵌入式系統遠程調試技術,自主研發的嵌入式處理器設計了專門的DAP模塊,在調試器OpenOCD的基礎上設計了相應的調試操作函數接口,實現了高效穩定的遠程調試系統。本文提出的遠程調試設計方法對其他嵌入式調試系統設計具有一定參考價值。

[1]馬艷.基于事件循環機制的嵌入式應用級交叉調試器的研究[D].武漢:華中科技大學,2013.

[2] Wootton C.DebuggingYourApplication[C]//Beginning Samsung ARTIK.Apress,2016:325-331.

[3]黃子晨,李德華.基于OpenOCD和JTAG的嵌入式交叉開發環境[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調試方案的研究與實現[D].青島:中國海洋大學,2012.

[6]徐文昌.SoC調試跟蹤系統的設計與實現[D].西安:西安電子科技大學,2013.

[7]張鵬,樊曉椏,黃小平.基于總線訪問的片上調試方法研究[J].計算機測量與控制,2014(2):510-512,518.

[8]況陽.支持USB的嵌入式軟件遠程調試器的設計與實現[D].成都:電子科技大學,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嵌入式處理器調試系統的開發與研究[D].武漢:武漢紡織大學,2013.

[11]Joseph Yiu.ARM Cortex-M3權威指南[M].姚文祥.北京:清華大學出版社,2014.

[12]Esliger J L,Foley 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跨平臺調試系統的研究與實現[D].上海:華東師范大學,2015.

[14]Beneder R.Development of an OpenOCD compatible Debugger for ARM-CMARMJTAG[D].University of Applied Sciences Technikum Wien,2011.

[15]殷紹劍,雷航,詹瑾瑜.嵌入式遠程調試原理研究與實現[J].計算機應用與軟件,2014(6):240-243.

[16]任艷偉.基于acoral操作系統的調試器的研究與設計[D].成都:電子科技大學,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稿件編號:201610134

余梓奇(1992—),男,湖北武漢人,碩士研究生。研究方向:計算機系統結構、數字系統設計。

猜你喜歡
嵌入式指令調試
聽我指令:大催眠術
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
基于航拍無人機的設計與調試
電子制作(2018年12期)2018-08-01 00:47:44
搭建基于Qt的嵌入式開發平臺
FOCAS功能在機床調試中的開發與應用
無線通信中頻線路窄帶臨界調試法及其應用
電子制作(2017年19期)2017-02-02 07:08:38
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
調壓柜的調試與試運行探討
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 亚洲最新网址| 亚洲视频四区| 亚洲欧美综合在线观看| 亚洲成人免费在线| 国产91在线|日本| 免费国产黄线在线观看| 亚洲一级色| 五月婷婷激情四射| 国产欧美日韩另类精彩视频| 中文字幕不卡免费高清视频| 欧美视频在线播放观看免费福利资源| 亚洲精品第一页不卡| 91视频首页| 国产一区二区三区免费观看 | 中文字幕在线永久在线视频2020| 亚洲日韩第九十九页| 免费亚洲成人| 尤物特级无码毛片免费| 蜜芽一区二区国产精品| 色欲色欲久久综合网| 欧美久久网| 91成人在线免费视频| 少妇极品熟妇人妻专区视频| 免费不卡视频| 日本亚洲最大的色成网站www| 亚洲视频色图| 麻豆精品在线视频| 日a本亚洲中文在线观看| 久久综合色天堂av| 美女被狂躁www在线观看| 操操操综合网| 久热精品免费| 欧美日韩中文字幕在线| 四虎影院国产| 色综合热无码热国产| 福利在线不卡一区| 色哟哟精品无码网站在线播放视频| 国产精品偷伦在线观看| 91小视频在线播放| 狠狠色丁婷婷综合久久| 欧美午夜小视频| 成人午夜在线播放| 亚洲综合久久成人AV| 亚洲免费人成影院| 日本一本在线视频| 制服丝袜无码每日更新| 亚洲欧美成人影院| 婷婷综合亚洲| 性欧美精品xxxx| 国产精品白浆在线播放| 亚洲精品国产综合99久久夜夜嗨| 制服丝袜 91视频| 999精品视频在线| 国产色婷婷| 国产第一色| 国产成人久久综合777777麻豆| 国产精品视频a| 午夜精品久久久久久久99热下载| 无码人妻免费| 欧美日韩精品一区二区在线线 | 亚洲国产精品日韩av专区| 欧美精品在线免费| 欧美乱妇高清无乱码免费| 91久久偷偷做嫩草影院电| 国产成人精品一区二区不卡| 久久久久久久久亚洲精品| 综合久久久久久久综合网| 区国产精品搜索视频| 成人福利在线视频| 九九久久99精品| 一区二区三区四区在线| Jizz国产色系免费| 国产免费久久精品99re不卡| 97久久精品人人| 日韩在线第三页| 国产成人在线小视频| 国产精品太粉嫩高中在线观看| 欧美亚洲国产精品久久蜜芽| 日韩欧美综合在线制服| av一区二区无码在线| 国产精品亚洲精品爽爽| 欧美性猛交xxxx乱大交极品|