色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何實現RISC-V架構的交叉調試系統設計

麥克泰技術 ? 來源:嵌入式系統專家之聲 ? 2023-12-19 11:07 ? 次閱讀

0 引言

國內外各類構的嵌入式芯片在競爭激烈的市場環境不斷突破技術壁壘,飛速提升性能。芯片配套的集成開發環境(IDE,Integrated Development Environment)作為開發中的關鍵工具,其提供的交叉編譯和交叉調試功能解決了嵌入式開發中目標機的運算能力和存儲空間有限的缺陷,對芯片嵌入式開發的重要性不言而喻。

近年來,各芯片廠商都在大力研發自己芯片的配套IDE,力圖打破 KEIL和IAR兩個行業標桿的壟斷局面。這些免費IDE(如ST的 CubeIDE和TI的CCS)大部分是基于Eclipse深度定制的,包含 Eclipse、SDK插件、代碼生成插件、編譯工具鏈,以及調試工具鏈的開發環境。目前,這些IDE存在僅針對各自產品的定制化開發、源碼封閉導致二次開發困難等問題?;谏鲜鲈?,新上市的硬件產品移植適配工作量巨大,不利于IDE的推廣使用。

本文主要由Eclipse、GDB、OpenOCD(采用JTAG標準)組成的自主方案實現了IDE。鑒于交叉調試的重要性,本文重點介紹基于GDB和OpenOCD的技術選型,實現了目標機(芯片型號為基于RISC架構的RAC102)的交叉調試方案。在該方案中,對GDB和OpenOCD源碼進行自主編譯移植后,兩者采用遠程通信協議(RSP,Remote SerialProtocol)進行通信,完成可執行程序的調試操作。通過此案例驗證了IDE設計方案中交叉調試的可行性,為后續其余架構的IDE適配提供了指導思路。在此技術基礎上,提供支持多架構芯的通用且開放的嵌入式開發集成環境。

1 設計思路

1.1 器件選型

1.1.1 編輯器選型

Eclipse平臺為更好地為C/C++開發人員服務,衍生出了Eclipse CDT 擴展套件。該套件可以為嵌入式開發者提供C/C+ +程序的編輯、編 譯、運行及本地調試等功能[1]作為利用機器接口(MI,Machine Interface)支持C/C++源碼調試最好的開源工具,采用CDT套件作 為交叉調試的前端,通過MI接口使CDT和GDB相互通信,構建了可視化的嵌入式遠程調試軟件,提高了開發效率。

1.1.2 調試器選型

GDB是GNU工具集中的開源且高適配性的調試器,根據可執行程序的運行位置分為本地調試和遠程調試兩種模式。在遠程調試模式下,GDB與調試代理(OpenOCD、GDBServer等)通過RSP協議進行信息交互,完成目標機上可執行文件的調試控制。注意,若目標機架構與宿主機架構不同,則稱為交叉調試。此外,GDB支持兩種外部調試工具接口:MI和CLI(CommandLineInterface),其多樣化的接口、完善的目標處理機制等特點為后續IDE的架構適配打下了基礎。

1.1.3 調試代理選型

OpenOCD(Open On Chip Debugger)是一個開源、通用的片上調試器,并且可作為支持JTAG標準的調試代理。目前,可與GDB聯合為RISC V、ARM、MIPS等架構的芯片提供在線調試工具[2]。OpenOCD開源的好處在于,可自主改寫函數源碼進而適配目標芯片的特性。因此,基于GDB和OpenOCD搭建的調試系統具備功能拓展簡單靈活、架構兼容性強的優勢。此外,OpenOCD支持各種商用JTAG仿真器、直接讀寫物理地址和核內部寄存器等特點也是技術選型時考慮的因素。

1.1.4 調試標準選型

JTAG(JointTest Action Group)邊界掃描調試標準主要提供微處理器電氣特性測試和目標機可執行程序調試兩大功能,適用于配置了JTAG接口的芯片電路?;贘TAG標準的微處理器在調試模式下中斷可執行程序,上層的GDB和OpenOCD發送調試命令到調試模塊,完成后續程序調試工作。采用JTAG標準的主要原因是:①基于ARM、RISCV、Intel等主流架構的微處理器實現了JTAG調試接口,該標準適配性高。②基于該標準的調試具備程序無侵入、依賴簡單、高穩定性的特點。

1.2 整體框架

本文自主設計的IDE以主流嵌入式開發類似的宿主機目標機通用結構為基礎進行整體框架設計,如圖1所示??紤]到目標機存儲資源的局限性,目標機端放置調試代理(GDB Server或GDB STUB)的傳統方案被摒棄。本框架方案中,目標機端僅運行可執行程序,宿主機端由Eclipse、GDB和OpenOCD組成,其中OpenOCD完成了傳統方案下目標機端的調試代理工作。在框架中,首先CDT圖形界面通過UI操作來調用MI接口與GDB,進行調試命令發送和調試信息獲取。GDB通過MI接口獲取調試命令后,在RSP序列包封裝和解析機制下與Open-OCD進行調試命令傳遞和調試信息反饋。

最后,JTAG仿真器通過宿主機通信端口接收到OpenOCD的指令,將其轉換為標準的JTAG信號并通過調試訪問端口(DAP,Debug Access Port)發送給目標機端。JTAG進入調試模式讀取內存和寄存器,按照需求進行可執行程序調試,目標機完成調試后再將調試結果反饋給宿主機。通過上述流程,IDE完成目標機可執行程序的交叉調試。

5193db2c-9e1b-11ee-8b88-92fbcf53809c.png

圖1 IDE設計框圖

2實現方式

2.1 驅動適配

為了目標機的可執行程序被順利調試,首先要保證目標機和宿主機之間的傳輸正常。由于使用默認驅動時,通過USB端口與仿真器 通信會發生異常錯誤,因此,采用Zadig工具更新宿主機的USB驅動,從而保證目標機可以與宿主機進行正常通信。其驅動安裝步驟如下:

①在菜單欄中選擇“Options”->“List All Devices”,查看當前連接到計算機上的所有USB設備。

②在接口復合框中分別選中目標機對應的“Dual RS232-HS (Interface 0)”接口,并在驅動復合框選擇“WinUSB”驅動。

③選擇“Replace Driver”進行驅動更新即可。

④重復上述3個步驟,步驟②中接口選擇“Dual RS232-HS (Interface 1)”,完成該接口的驅動安裝。

2.2 操作系統適配

由于IDE設計方案中交叉調試的調試器選用了GDB,因此運行在 Unix/Linux系統下的GDB適配宿主機系統(Windows系統)是需要完成的目標。為了實現上述目的,可以采用Cygwin工具,其功能就是 在Windows上仿真Linux操作系統,使得GNU工具鏈可以運行在Linux模擬環境。在運行Windows的同時,僅依賴Cygwin核心的動態 庫(如cygwin1.dll)也可以使用VIM、GCC、make、GDB等Linux工具。注意,安裝Cygwin時并沒有缺省安裝GNU工具鏈,應根據需求安裝 相應的工具。本文根據操作系統的配置需要安裝了binutils、gcc-core、gcc-g++、gdb、make等工具。

2.3 源碼編譯調試

2.3.1 GDB工作目錄建立

首先通過Cygwin進入GDB源碼根目錄,新建文件夾build,用來存儲 源碼編譯后的可執行文件。注意,Win- dows目錄在Cygwin進行了掛 載,如D盤路徑變成/cyg- drive/d等。因此,進入GDB源碼根目錄時要注意目錄路徑的變換。命令行操作如下:

//查看磁盤掛載情況,識別掛載后磁盤路徑

#df-h

//進入 GDB源碼根目錄

#cd/cygdrive/d/gdb-source/gdb-10. 2

//創建 build工作目錄

#mkdirbuild

2.3.2 GDB源碼編譯

編譯源碼的主要流程由./configure(腳本文件配置)、make(工具編譯)、make install(工具安裝)3個步驟構成。具體而言,首先,運行configure腳本檢查當前的配置選項和系統環境設置,檢查正確 后根據源碼中Makefile.in模版文件的引導生 成 Makefile文件;然后,make工具根據Makefile文件的進行預處理、編譯、鏈接等項目構建工作,生成二進制文件;最后,make install命令根據執行con-figure腳本時傳遞的prefix等參數將生成的二進制文件安裝到指定路徑。

執行./configure需要進行各種參數配置,GDB交叉編譯中使用的參數配置如表1所列。

表1 configure腳本參數說明

51a378ca-9e1b-11ee-8b88-92fbcf53809c.png

GDB源碼編譯的操作如下:

//建立交叉調試環境之前檢查 config. sub腳本是否支持目標機架構的編譯 。若支持 ,則返回相應的架構類型 ,否則會報錯

# sh config. sub riscv64 unknown elf gcc

//執行 configure腳本 ,其中 CFLAGS= " g"的作用為后續調試 GDB源碼顯示調試信息。build和 host參數默認均為

本機架構,不再顯性指定

#./configureCFLAGS=" g"

target=riscv64 unknown elf

prefix=/cygdrive/d/gdb source/gdb 10.2/build

//make編譯與安裝

#make

#makeinstall

2.3.3 GDB源碼調試

前面的工作已經編譯生成了基于RISC V架構的GDB可執行程序,可以進行目標機上被調試程序的交叉調試工作。若GDB調試過程中出現了BUG或者需要進一步理解內部運行機制,則需要進入GDB源碼調試模式。為了方便閱讀調試源碼,選擇VSCode進行GDB源碼調試,需配置launch.json文件,該配置文件主要作用是添加GDB調試任務并運行可執行文件。launch.json文件配置流程主要分為以下幾個步驟:

①生成launch.json文件。菜單欄選擇“運行”->“添加配置”->“C++(GDB/LLDB)”,即可生成一個配置為空的launch.json文件。

②添加默認配置模版。在"configurations"字段域中輸入“GDB”可以自動生成默認配置。

③修改默認配置。"program"字段代表調試器的路徑,該字段設置為Cygwin的GDB路徑;"miDebuggerPath"字段代表被調試的可執行文件路徑,該字段設置為前面編譯生成的GDB程序。

完成launch.json文件配置后,在VSCode中選擇“gdb啟動”就可以在調試模式下運行GDB調試器。

此外,調試代理OpenOCD的編譯和調試與GDB源碼編譯和調試工作步驟基本一致,在此不再重復說明。目標機的被調試的可執行程序為RAC102芯片自帶示例程序。

2.4 交叉調試

首先,運行OpenOCD程序后,會彈出運行終端窗口,顯示JATG標準選擇、芯片架構信息、監聽端口等第一階段信息,表示OpenOCD運行正常,與目標機的RAC102芯片連接成功。

之后,以調試模式或者運行模式打開GDB程序,彈出運行終端窗口,在終端中依次設置指定RAC102芯片的架構、遠程調試的連接端口以及加載調試信息文件,命令執行如下:

(gdb) set architecture riscv:rv32

The target architecture is assumed to be riscv:rv32

(gdb)target extended-remote localhost:3333

Remote debugging using localhost:3333

(gdb)file D:\led\led_debug.elf

Reading symbols from D:\led\led_debug.elf…

完成上述操作后,OpenOCD運行終端會輸出端口連接成功、中斷地址等第二階段信息,表示OpenOCD與GDB連接成功。此時可以在GDB調試終端中輸入continue、step、break等常用的調試命令進行交叉調試。

3 功能驗證與協議分析

在交叉調試中,GDB所有的調試命令和調試信息反饋均通過RSP協議來實現。該協議通過串口或網口等媒介傳輸ASCII消息。RSP包的基本格式為:$數據包#校驗和[3-4]。其中,數據包由若干ASCII數據組成,該校驗和是數據包所有字符的ASCII碼之和取256的模后得到的值,用兩位十六進制ASCII表示。若OpenOCD正確接收數據,則會返回‘+’,否則返回‘-’表示發生錯誤,要求重新發送消息[5]。

由GDB和OpenOCD源碼調試分析可知,GDB作為RSP客戶端,在remote.c源文件中完成了讀寫、運行控制、查詢及設置、追蹤點以及停止通知等RSP常用類型通信包的接口實現;OpenOCD作為RSP服務端,在server.cc源文件完成了GDB發送的通信包的解析與處理。在此基礎上,通過RSP通信包的組合實現常用的GDB調試命令。

在上述前提下,通過調試命令對應的RSP協議分析來驗證在GDB+OpenOCD的方案中基于RISC-V架構的RAC102芯片交叉調試的功能正確性。參照第2.4小節的交叉調試流程,區別在于在執行target extended-remote localhost:port命令之前,需要使用set remotelogfile filename命令配置好遠程串行通信記錄日志,日志文件名為filename,GDB會將與OpenOCD的交互數據寫入該日志文件中。通過表2給出了驗證后常用的調試命令以及對應RSP協議指令集,證明了交叉調試方案設計的正確性與可行性。

表2 GDB命令與RSP協議對照指令集

G D B 命 令 RSP請求序列 RSP應答序列
target extended-
remotelocalhost:
port

①qSupported
②vMustReplyEmpty
③QStartNoAckMode
④!
⑤Hg thread-id
⑥qXferread
⑦qTStatus
⑧?
⑨qXferread
⑩Hc thread-id

?qC
?qAttached
?qOffsets
?g
?qXferread
?qSymbol
①qSymbol::Size;
qXferread;
QStartNoAckMode;
vContSupported
②空
③OK
④OK
⑤OK
⑥m data
⑦空
⑧S signal-id
⑨1 data
⑩OK
?QC thread-id

?1(注:數字1)
?Text =xx;Data=yy;
Bss=zz
?XX..(注:寄存
器數據內容)
?1 data
?OK
file filename ①qSymbol
②g
①OK
②XX..
run
①vKill;pid
②k和?組合包
vRun
④qC
⑤qAttached
⑥qOffsets
⑦Hg thread-id
⑧qXferread
⑨g
⑩vCont;c
?x03
?g
?qXferread
①空
②W00
③S signal-id
④QC thread-id
⑤1(注:數字1)
⑥Text=xx;Data=yy;
Bss=zz
⑦OK
⑧m data
⑨XX..
onds>
?T siganal-id
?XX..
?1 data
continue ①m
②ZO
③vCont?
④yCont;c
⑤g
⑥qXferread
⑦z0
①XX..
②OK
③vCont;c;C;s:S
④T signal-id
⑤XX..
⑥1 data
⑦OK
next ①m
②ZO
③vCont;s:thread -
id;c
④g
⑤qXferread
⑥z0
①XX..
②OK
③T thread-id
④XX..
⑤1 data
⑥OK
step
break lineNo ①m(若干包) ①XX..(若干包)
watchval
print yal
backtrace
diassemble
quit ①D
②?
①OK
②S siganal-id

4 結語

本文自主設計了一套集成開發環境方案,該方案中基于自行編譯的GDB和OpenOCD實現了基于RSIC-V架構的RAC102芯片的交叉調試,并且通過RSP協議分析進行了調試功能的驗證。交叉調試方案的實現為后續其余架構芯片的集成開發環境設計與實現提供了指導思路。進一步,為自研架構芯片設計開發的自主可控提供了保障。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120232
  • 仿真器
    +關注

    關注

    14

    文章

    1017

    瀏覽量

    83722
  • 嵌入式開發
    +關注

    關注

    18

    文章

    1028

    瀏覽量

    47563
  • GDB調試
    +關注

    關注

    0

    文章

    24

    瀏覽量

    1447
  • RISC-V
    +關注

    關注

    45

    文章

    2271

    瀏覽量

    46131

原文標題:RISC-V架構的交叉調試系統設計

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    正式的RISC-V基礎指令集架構與特權架構規范來了,RISC-V基金會已正式批準

    根據RISC-V基金會官網發布的公告,RISC-V 基金會宣布了批準RISC-V 基礎指令集架構與特權架構規范,為
    的頭像 發表于 07-11 10:46 ?9860次閱讀

    RISC-V PMP調試

    RISC-V PMP調試
    的頭像 發表于 06-08 11:52 ?1920次閱讀
    <b class='flag-5'>RISC-V</b> PMP<b class='flag-5'>調試</b>

    rIsc-v的缺的是什么?

    通過軟件模擬或復雜的指令序列來實現一些高級功能,這可能會增加執行時間和功耗。 2. 生態系統支持不足 軟件和工具鏈的可用性:盡管RISC-V社區在快速發展,但與成熟的ARM等架構相比,
    發表于 07-29 17:18

    基于risc-v架構的芯片與linux系統兼容性討論

    一定的兼容性挑戰,但并非不可克服。通過針對RISC-V架構進行編譯和優化Linux內核、確保硬件接口兼容、支持平臺特性、提供適用的編譯工具鏈和二進制格式以及構建完整的生態系統等措施,可以實現
    發表于 11-30 17:20

    RISC-V架構及MRS開發環境回顧

    ,華為海思轉向了開源指令集架構RISC-V,針對鴻蒙操作系統的開發者發布了首款RISC-V開發板Hi3861。Hi3861針對的是物聯網市場,突破ARM限制。(5)
    發表于 12-16 23:08

    RISC-V 生態架構淺析

    模式。通過不同的模式組合可以實現不同的系統。2.5 自定制指令擴展除了上述闡述的模塊化指令子集的可擴展、可選擇,RISC-V架構還有一個非常重要的特性,那就是支持第三方的擴展。用戶可以
    發表于 06-22 16:51

    學習RISC-V入門 基于RISC-V架構的開源處理器及SoC研究

    系統調用指令:實現系統調用、調試等功能。1.2 RISC-V的優勢1.2.1 與開源指令集架構
    發表于 07-27 18:09

    科普RISC-V生態架構(認識RISC-V)

    模式。通過不同的模式組合可以實現不同的系統。2.5 自定制指令擴展除了上述闡述的模塊化指令子集的可擴展、可選擇,RISC-V架構還有一個非常重要的特性,那就是支持第三方的擴展。用戶可以
    發表于 08-02 11:50

    ARM與RISC-V架構的區別是什么?

    2019年開始,RISC-V得到了越來越多的重視,原因有很多,ARM授權費高是關鍵的因素,下面就來說說關于ARM和RISC-V架構,以及相關的內容。 關于ARM 1991 年ARM 公司成立于英國
    發表于 04-25 09:13

    RISC-V 生態架構淺析

    的應用,參與度之高,覆蓋面之廣,盛況空前;指令集架構的生態鏈正在成長和完善,工具鏈、RTOS/Linux操作系統的移植等工作都取得關鍵突破;2018年11月,RISC-V基金會宣布了與Linux基金會
    發表于 06-18 19:59

    分析RISC-V架構的不同之處

    0 RISC-V和其他開放架構有何不同如果僅從“免費”或“開放”這兩點來評判,RISC-V架構并不是第一個做到免費或開放的處理器架構。在開始
    發表于 07-26 06:58

    RISC-V架構簡介

    【摘要】 本文首先對RISC-V架構做了簡要的介紹,在此基礎上實現了LiteOS在RISC-V架構上的適配過程的具體步驟,希望對你有所幫助
    發表于 07-28 07:46

    RISC-V架構

      RISC-V架構  RISC-V(發音為“risk-five”)是一個基于精簡指令集(RISC)原則的開源指令集架構(ISA)?! ∨c大
    發表于 04-03 15:29

    談一談RISC-V架構的優勢和特點

    得中國的芯片設計者能夠更加靈活地進行設計,降低生產成本,提高市場競爭力。 2、可移植性好、可擴展性強:開發者能方便地移植Linux和Unix系統RISC-V平臺上,這樣就可以在RISC-V
    發表于 05-14 09:05

    兩大架構RISC-V 和 ARM 的各種關系

    一、RISC-V 和 ARM 的相似之處 RISC-V 和 ARM 基本上都是 RISC(精簡指令集計算機)。RISC-V 和 ARM 都使用加載-存儲
    發表于 06-21 20:31
    主站蜘蛛池模板: 囯产精品麻豆巨作久久| 青青草国产自偷拍| 亚洲日本在线不卡二区 | 国产CHINESE HD精品| 欧美激情视频一区| 4399日本电影完整版在线观看免费| 国内精品蜜汁乔依琳视频 | 成年人视频在线观看免费| 免费无遮挡又黄又爽网站| 在线 无码 中文 强 乱| 精品无码久久久久久动漫| 亚洲精品久久久992KVTV| 国产香蕉尹人视频在线| 无码乱人伦一区二区亚洲| 国产成人精品自线拍| 日日摸天天添天天添无码蜜臀| QVOD理论| 欧美亚洲国产手机在线有码| asian4you裸模| 嫩草影院成人| avove旗袍丝袜高跟啪啪| 牛牛精品专区在线| 99久久亚洲| 欧美无码专区| 插我一区二区在线观看| 人人碰国产免费线观看| 超碰视频在线| 三叶草成人| 国产精品97久久久久久AV色戒| 国产午夜在线观看视频| 小妇人电影免费完整观看2021| 国产精品免费视频播放| 小p孩玩成年女性啪啪资源| 国产亚洲精品久久久闺蜜| 亚洲男人天堂网| 久久精选视频| 亚洲国产成人私人影院| 国产一级毛片在线| 一本色道久久88综合日韩精品| 国产成人高清精品免费5388密| 沙发上小泬12P|