最近做毕设的时候使用了jlink进行树莓派的单步调试,其配置和使用记录如下。
1. 树莓派boot启动配置
为让树莓派启动后配置gpio以支持jtag接口,启动config.txt文件中需要加一句
1 |
|
2. openodc配置脚本
接着配置开发机端相关的程序,需要下载opencdc程序,配置脚本如下。
1 |
|
这里git rev-parse --show-toplevel
是git的一条底层命令(plumbing),rev表示revision,用于和高层命令(porcelain)区分
3. jlink连接
连接参照jlink文档。
jlink对应raspi的gpio端口连接参考debugging raspberry pi board
3.1. openocd配置脚本
openocd编译目录下openocd/tcl/interface/
的jlink.cfg
文件
1 |
|
然后是一个自己写的tcl脚本
1 |
|
4. 嵌入式环境下gdb一些使用
4.1. 建立连接
由于openocd会导出用于debug的服务器的端口供gdb连接,因此很方便地,在gdb中只要
target remote localhost:3333
需要注意的有以下几点
- 直接下载的
gdb
不一定能够work,可能无法识别并调试aarch64版本,需要下载sudo apt-get install gdb-multiarch
- gdb需要使用编译生成的debug版本的elf文件(而非release版本)导入debug符号表等信息
- 和板子连接的时候,要先把板子上电,boot的时候会初始化jtag相关的gpio,然后再接再开发机端用openocd连接jlink。
4.2. 在某个具体内存位置设置断点
b *[内存地址]
在某个具体内存位置的指令处设置断点。
4.3. 查看具体内存地址处指令
x/5i [内存地址]
i
表示以指令形式打印,前面的数字表示指令数量。
4.4. 打印某个寄存器信息
p $[寄存器名]
4.5. gdb的tui界面
layout asm
上述命令可以切换为显示汇编代码的tui布局,有时可能需要返回默认的布局,命令是ctrl x + a
。