gdb-stub 和 Target Description
在尝试给NEMU移值linux的陷入的调试的黑洞,遂尝试nemu接入gdb
GDB Stub
在嵌入式系统中,由于目标设备可能没有足够的资源运行完整的 GDB,或者无法直接与开发者的主机连接,因此需要一个简化的代理程序来完成以下任务:
- 接收 GDB 的调试命令。
- 在目标设备上执行这些命令(例如设置断点、读取寄存器、修改内存等)。
- 将执行结果返回给 GDB
找到了一个非常简易的实现方式 https://github.com/RinHizakura/mini-gdbstub
使用
用 target remote localhost:1234
就可以让gdb连接上
结合tmux和Makefile , 可以让编译运行的时候自动分屏
1 |
|
Target Description
Target Description 是 GDB 用来描述目标设备(Target)硬件架构和特性的一个机制。它定义了目标设备的寄存器、内存布局、指令集等信息,从而使 GDB 能够正确地与目标设备通信并执行调试操作。
我的目标是在gdb上watch/read 我自己实现的CSR寄存器
参考了一下qemu-system-riscv64
的配制,自己写了宏来展开
Imp
1 |
|
其中CSR_LIST
的定义:
1 |
|
这里我使用define/undef来实现多种展开方式
分片传输
这部分内容已经pr(#8)了
在mini-gdbstub里面把一块数据的大小设置成了0x400
, 如果要传我们自己的东西是肯定不够的如果强行设大的话gdb会报错Received too much data from the target.
所以得给数据分片传输
简单上网查询了规范
1 |
|
$->开始
(l/m)->是否是最后一个
#->结束
hh->校验
gdb-stub 和 Target Description
https://20040702.xyz/2025/02/05/gdb-stub/