天天看點

RV-LINK:GDB 使用 RV-LINK 仿真器調試 RISC-V 程式

RV-LINK:GDB 使用 RV-LINK 仿真器調試 RISC-V 程式

RV-LINK 項目首頁:​​https://gitee.com/zoomdy/RV-LINK​​​ 最新的文檔請通路:​​https://gitee.com/zoomdy/RV-LINK/wikis​​,這裡的内容可能沒有及時更新。

準備 RV-LINK

首先将所支援的開發闆燒入 RV-LINK 固件,然後開發闆就變成 RISC-V 仿真器了,目前支援 Longan Nano 和 GD32VF103C-START 這兩款開發闆,請參考​​《将 Longan Nano 開發闆變成 RISC-V 仿真器》​​和​​《将 GD32VF103C-START 開發闆變成 RISCV-V 仿真器》​​

準備 RISC-V GDB

如果已經安裝了 RISC-V GCC 工具鍊,那麼忽略該步驟,跳到 《安裝 USB 序列槽驅動》。

下載下傳 GDB

建議使用 GNU MCU Eclipse 項目釋出的交叉工具鍊裡的 GDB,下載下傳位址:​​https://gnu-mcu-eclipse.github.io/toolchain/riscv/releases/​​

也可以通過芯來科技的下載下傳頁面下載下傳:​​https://www.nucleisys.com/download.php​​ ,芯來科技網站下載下傳會比較快一些。

根據所使用的系統選擇下載下傳對應的版本,Ubuntu 下載下傳 centos 版本,理論上 centos 版本适合所有 Linux 發行版。

安裝 GDB

将下載下傳好的壓縮包解壓即可,不需要安裝。

将 bin 目錄加入 PATH 環境變量

将 riscv-none-embed-gdb 所在的目錄加入 PATH 環境變量。

​...\GNU MCU Eclipse\RISC-V Embedded GCC\8.2.0-2.2-20190521-0004\bin​

安裝 USB 轉序列槽驅動

RV-LINK 對上接口是一個 USB 序列槽,是以使用 RV-LINK 之前首先要配置好 USB 序列槽,RV-LINK 使用标準的 USB CDC ACM 序列槽,遵循《Universal Serial Bus Class Definitions for Communication Devices》(usbcdc11)規範。Linux 和 Windows 10 系統自動支援 CDC ACM 序列槽,Windows 7 需要安裝驅動。

Windows 7

目前,RV-LINK 所使用的 Longan Nano 和 GD32VF103C-START 開發闆均以 GD32VF103CB 為控制器,使用的是 GD 的 USB 序列槽 VID 和 PID,是以安裝 GD 的 USB 序列槽驅動。

在 GD 的下載下傳頁面 ​​http://gd32mcu.21ic.com/documents/index/classify_id/7​​ 下載下傳 USB Virtual Com Port Driver,下載下傳需要注冊。

根據自身系統是32位或64位選擇x86或x64版。

RV-LINK:GDB 使用 RV-LINK 仿真器調試 RISC-V 程式

點選 Install 安裝即可。

Windows 10

Windows 10 會自動安裝 USB 序列槽驅動,隻要将 RV-LINK 的 USB 口插入電腦,稍等片刻就可以了,打開裝置管理器檢視對應的序列槽号,以下假設序列槽号為 COM4。

Linux

這裡假設使用 Ubuntu 發行版。Linux 自帶 USB 序列槽驅動,隻要将 RV-LINK 的 USB 口插入電腦,裝置名稱為:​

​/dev/ttyACM0​

​​,如果有多個 USB 序列槽,那麼也可能是 ​

​/dev/ttyACM1​

​ 等。

GDB 連接配接 RV-LINK

首先按照往常一樣執行 GDB:

riscv-none-embed-gdb xxx.elf      

接着連接配接 RV-LINK,使用 ​

​target remote ...​

​ 指令連接配接 RV-LINK 對應的序列槽号。不同的系統,使用的序列槽号不同。GDB 連接配接 OpenOCD 時,使用的是 TCP/IP,RV-LINK 使用的是序列槽,差別就在這。

Windows:

target remote com4      

Linux:

target remote /dev/ttyACM0      

複位并halt:

monitor reset halt      

其它就和平常使用 GDB 一樣一樣了:

  • ​load​

    ​,下載下傳程式
  • ​b main​

    ​,設定斷點
  • ​info registers​

    ​,檢視通用寄存器
  • ​info all-registers​

    ​,檢視包括 CSR 在内的所有寄存器
  • … 等等

常見的問題

xlen 不比對

如果 GDB 指令行參數沒有指定程式,那麼會報如下錯誤:

bfd requires xlen 8, but target has xlen 4      

這隻要在 GDB 中輸入:

set arch riscv:rv32      

告知 GDB,咱現在是 RV32,然後重新執行 ​

​target remote ...​

​ 就沒有問題了。

No such file or directory

Error message from debugger back end:
com3: No such file or directory.      

可能的原因有:

  • 序列槽号錯誤,通過裝置管理器檢視正确的序列槽号,如果裝置管理器沒有看到序列槽,那麼檢查 RV-LINK 是否正确連接配接,USB 序列槽驅動是否正确安裝。
  • 序列槽被占用,序列槽被其它程式占用,比如已經打開了一個調試程序,又打開同樣的調試程序就會報這個錯誤。
  • 如果在虛拟機裡跑,檢查一下有沒有将 USB 序列槽映射到虛拟機裡。

the target is not connected

Error message from debugger back end:
Remote replied unexpectedly to 'vMustReplyEmpty': 
RV-LINK ERROR: the target is not connected!
RV-LINK: Longan Nano, configed for GD32VF103 family.      
  • 目标闆沒有上電,檢查目标闆的電源。
  • JTAG 連線有問題,檢查 JTAG 連線,任何一根線有短路或斷路,都無法連接配接上。

the target is not supported

Error message from debugger back end:
Remote replied unexpectedly to 'vMustReplyEmpty': 
RV-LINK ERROR: the target is not supported, upgrade RV-LINK firmware!
RV-LINK: Longan Nano, configed for GD32VF103 family.      
  • 所連接配接的目标 MCU 不被目前的 RV-LINK 支援,例如目前 RV-LINK 配置成支援 GD32VF103,而實際連接配接的是 K210,就會報告這個錯誤。需要更換 RV-LINK 固件,如果目标 MCU 還沒有被 RV-LINK 支援,那麼需要在 RV-LINK 中添加對該 MCU 的支援。

繼續閱讀