ARM平台裸板GDB调试

来源:互联网 发布:淘宝女装模板 编辑:程序博客网 时间:2024/06/04 20:36

ARM平台裸板GDB调试

概述

调试方式

ARM平台下裸板调试,一般分为两种。
* ARM内核的MCU开发和调试
* ARM内核的SOC的bootloader开发和调试

MCU的开发多是基于Windows系统。使用Keil(MDK)、芯片厂商基于eclipse的改造的IDE进行开发。当然也有开发者自己搭建环境进行开发的(gcc+编辑器等方式)。
SOC bootloader调试多是使用Linux系统。使用GCC或者ARMCC进行编译。

编译器选择

arm的编译有两种:

编译器 区别 ARMCC ARM官方,收费,闭源 GCC交叉编译器 非官方,免费,开源

使用ARMCC编译器的多是在Keil(IDE)平台下开发,当然Linux也有(如高通平台的modem模块)不过用的少。
gcc免费开源,在Windows和Linux下的使用者都很多。

调试工具

不管哪种方式,在ARM平台下的裸板开发基本都会使用JTAG接口的仿真器进行在线调试。
不管是Jlink还是STlink等,都是开发者常用的JTAG接口的仿真器。
现在ARM内核的芯片和仿真器基本都支持SWD模式,毕竟只用四个引脚,硬件电路设计方便。

小结

本文将介绍在使用Jlink和GDB在线调试的方式。

Jlink的使用

Jlink安装

在Jlink官网https://www.segger.com/可以下载到最新Jlink软件。根据自己的操作系统选择对应的即可。

Jlink GDB Server是用来实现JLink和GDB程序的通信的server程序。其使用socket的方式来实现和GDB的通信,十分灵活方便。
不仅可以在本地通过localhost:port方式,也可以在局域网内联网调试。
这极大方便了使用虚拟机的用户。既可以使用纯WIN或者纯Linux的开发,也可在双系统下的调试开发。

以window下的Jlink为例,运行Jlink GDB Server程序。
jlink_gdb_server.jpg
点击OK运行
jlink_gdb_server_run.jpg
等GDB连接上红色就变为绿色了

GDB的使用

以下内容引用自萌萌哒兔纸酱-CSDN

运行GDB

$ arm-none-eabi-gdb

进入如下界面

GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvsCopyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.This GDB was configured as "--host=i686-w64-mingw32 --target=arm-none-eabi".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".Type "apropos word" to search for commands related to "word".(gdb)

连接端口

若是本地如下,若是局域网内则填写ip:port

(gdb)target remote localhost:2331

具体的端口号见Jlink GDB Server上面的提示(如上一个图中显示的是“2331”)

进行初始化操作

(gdb)monitor reset(gdb)monitor halt

这里monitor意为这向连接的外部软件发送指令,此处即向Jlink发送指令,因为reset halt等指令不是GDB的内部指令

装载调试程序

(gdb)file <编译生成的elf文件>(gdb)load

注意生成elf文件时要加-g选项,不然你只能看到汇编代码了 T_T

进行调试

网上关于gdb调试的教程已经很多,我这里再画蛇添足一下。

命令 缩写 含 义 l list指令的缩写 意为列出当前执行的源代码。同时输入指令后重复按回车等效于再次输入上次的指令。 c continue的缩写 在嵌入式GDB中我们不能使用RUN指令来运行代码,相应的我们需要continue指令来运行。 b break缩写 用于在程序中打断点,使用方式有很多种: b 16 ,在当前低16行代码出加断点。 b i=1 ,当i等于1时停止,类似于这种条件式断点的方式也是GDB独有的一种强大功能。 b main,在main函数的入口打断点。 i b info break缩写 显示当前设置的断点信息。如下面这个查到了在main函数处有两个断点,序号分别为1和2。 d break delet break缩写 删除所有断点。 d break 1 删除序号为1的断点 s step缩写 会进入子函数的单步运行 n next缩写 即会跳过子函数的单步运行 u until缩写 使用时后方加行号如: u 16 即运行到第16行 finish 完成并跳出当前的子函数 p print缩写 使用时后面加变量名称如:p tmp ,用来显示变量数值 display 使用时后面加变量名称如:display tmp ,用于跟踪变量数值,在每次执行停下时会自动显示变量数值。 bt 查看堆栈 q/Ctrl+d quit缩写 使用q即quit指令或快捷键Ctrl+d来正常退出GDB

gdb的GUI调试界面

(gdb)-