日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gdb 调试 RISC-V

發布時間:2024/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb 调试 RISC-V 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 優秀的產品需要有高效的調試手段,RISC-V的工具鏈中提供GDB。 使得切換到RISCV后,底軟和內核工程師的工作效率不受損害。

? ? ? 我們使用一個有趣的程序來嘗試gdb調試的效果。源文件 rot13.c 和 鏈接描述文件spike.lds如下

rot13.c 中,通過變量wait的值,控制程序進入不同階段:

? ? ? ? 階段1: 程序因為 0 == wait, 停留在一個死循環里面。在后面的gdb調試中,我們可以看到通過修改變量wait的值,控制程序進入下一個階段。

? ? ? ? 階段2: 程序執行簡單的“解密”運算,將初始化的“密文”解析為“明文”。在gdb中,我們將看到RISC-V demo 作者想告訴我們的信息。

? ? ? ? 階段3: 程序結束。

? ? ? ??

/* file name: rot13.c */ char text[] = "Vafgehpgvba frgf jnag gb or serr!";// Don't use the stack, because sp isn't set up. volatile int wait = 1;int main() {while (wait);// Doesn't actually go on the stack, because there are lots of GPRs.int i = 0;while (text[i]) {char lower = text[i] | 32;if (lower >= 'a' && lower <= 'm')text[i] += 13;else if (lower > 'm' && lower <= 'z')text[i] -= 13;i++;}done:while (!wait); } /* spike.lds */OUTPUT_ARCH( "riscv" )SECTIONS {. = 0x10010000;.text : { *(.text) }.data : { *(.data) } }

1.Build

? ?源碼Build 命令如下

$ riscv64-unknown-elf-gcc -g -Og -o rot13-64.o -c rot13.c $ riscv64-unknown-elf-gcc -g -Og -T spike.lds -nostartfiles -o rot13-64 rot13-64.o

2.調試

? ? 2.1 在spike(riscv-isa-sim)上運行程序rot13-64,在9824端口打開調試通道。

? ?2.2? 使用openocd 創建一個gdb調試的server, 通過9824端口連接到spike上的riscv實例,并在3333端口等待gdb的連接。

/*spike.cfg*/interface remote_bitbang remote_bitbang_host localhost remote_bitbang_port 9824set _CHIPNAME riscv jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME riscv -chain-position $_TARGETNAMEgdb_report_data_abort enableinit halt

? ?2.3 使用配套的riscv gdb工具進行調試。最終我們得到了demo 作者告訴我們的秘密

? ? ? ? “Instrcution sets want to be free!”

?

總結

以上是生活随笔為你收集整理的gdb 调试 RISC-V的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。