IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 如何使用ddd+gdb+qemu搭建开源的裸板arm汇编调试环境 -> 正文阅读

[嵌入式]如何使用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查看正在执行的指令和地址

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:53:52  更:2021-09-08 10:55:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:05:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计