ARM平台裸板GDB调试

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-cvs
Copyright (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)-

猜你喜欢

转载自blog.csdn.net/daoshuti/article/details/77985323