如何使用ddd+gdb+qemu搭建开源的裸板arm汇编调试环境

arm汇编在学习和开发过程中,免不了需要通过arm模拟器来进行一些调试,以及查看寄存器、查看汇编、单步调试等等操作,以下介绍一种全开源工具来调试arm汇编的方法。

1、预装环境

首先需要一个Ubuntu 18.04 + 的操作系统
我们需要安装一下必要的组件:

  • ddd
  • arm-none-eabi-gcc
  • QEMU

我们可以通过apt命令安装ddd作为可视化的汇编调试工具。

sudo apt install ddd qemu-system-arm 

我们不可以使用apt去安装arm-none-eabi交叉编译工具链,尽管我们可以通过

sudo apt install  binutils-arm-none-eabi #不要从这里安装,因为没有gdb

安装交叉编译工具,但是这套工具链中缺少了对于arm的gdb调试工具(可能我少安装了东西?),因此我们要去arm官网上下载arm交叉编译工具链,官方的包中包含针对arm汇编的gdb调试工具。

GNU ARM交叉编译工具链下载页面
解压后将gcc-arm-${版本}-${发布时间}-x86_64-arm-none-eabi/bin目录加入$PATH环境变量中,以便于随时调用。

2、编写一个例子

借用别人的一个代码作为可以在qemu上运行的已经写好链接器脚本的例子,
例子代码
我们通过运行

make DEBUG=1 VERBOSE=1

来编译生成二进制文件axf作为启动内核,获得了我们的axf文件后,接下来我们启动模拟器

qemu-system-arm -s -S -kernel  [axf文件路径].axf   -M virt -cpu cortex-a7

-s 参数表示指定QEMU打开TCP上的1234端口作为gdbserver的调试端口
-S 指定CPU保留到调用QEMU监控器 或gdb的指令,模拟器启动后会显示qemu窗口,我们接下来就可以启动ddd来调试和查看。
-kernel [axf文件] 通过-kernel参数指定要启动的裸板程序,通常可以指定Linux内核
-M virt 指定启动类型为虚拟
-cpu cortex-a7 要虚拟的cpu类型为cortex-a7

3、启动调试

接下来我们启动ddd来指定调试器来查看可视化调试窗口:

ddd --debugger arm-none-eabi-gdb  [axf文件路径].axf

我们仍然需要指定一个axf文件路径来告知gdb要调试的符号表是按照哪个axf固件文件的符号表进行调试。

在这里插入图片描述

启动后的窗口我们要在最下方的命令窗口执行:

target remote localhost:1234

进行远程主机调试。

我们输入以上命令回车后,会进入汇编调试状态,

在这里插入图片描述
窗口会进入到我们的汇编代码,这个时候我们就可以开始通过输入gdb命令的方式去进行调试跟踪。比如step等等,这些在旁边的快捷按钮窗口中也有提供。

在这里插入图片描述
调试过程期间,我们还可以对寄存器、线程、信号量进行查看和发送测试。
寄存器、线程、以及信号量都可以从status菜单中找到。
当单步调试时,可以看到箭头指向了正在执行的指令:
在这里插入图片描述
查看线程
在这里插入图片描述查看寄存器
在这里插入图片描述信号量发送测试
在这里插入图片描述
调试过程中如果需要查看正在运行的指令和地址,可以在View菜单中的machine code windows查看正在执行的指令和地址

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值