如果想更好的理解gdb和openocd,我画了一张图。我把调试的过程主要分为三部分。
- pc端主要备有gdb和openocd (我是在linux环境下进行调试的,同样也可以在window下进行相关的配置)
- 调试器采用usb转jtag的sipeed调试器
- riscv芯片(内部含有DTM、DMI、DM),可以买市面上的riscv开发板,实在不行就通过qemu来搭建riscv芯片。
使用的gdb的方式有很多,这里介绍一下我使用的gdb的版本。
下载链接如下:嵌入式交叉编译器链接包含gcc和gdb
我使用的是ubuntu20.04,所以安装红色箭头指向的文件就可以。大家可以根据自己的系统版本来选择需要安装的版本。(记得配置环境变量,这样我们就可以系统中的任何地方使用它)
同样,我们也可以根据需要调试的riscv芯片配置自己的交叉编译器,编译的时间很长,将近1个多小时。
下载链接如下:可定制的交叉编译器
这种配置方式对网络的要求很好,尤其是下载github里面的文件以及其子文件。后续我会写一篇文章教大家配置属于自己的交叉编译器。
同样,在riscv官方的调试手册中也可以看到下面的图。
当我们在gdb中输入一个设置断点指令,debug系统的内部是怎样工作的,这是我们需要关注的重点。
我觉得调试的核心在于对openocd的关键代码进行理解。在openocd中有上千个文件,但不是所有的文件我们都需要我们去看的,我们需要抓住其核心,这样才可以尽快的掌握。