当前位置:Gxlcms > 数据库问题 > 迅为i.MX6ULL开发板移植Gdb+Gdbserver调试

迅为i.MX6ULL开发板移植Gdb+Gdbserver调试

时间:2021-07-01 10:21:17 帮助过:13人阅读


(1)第一步:下载gdb压缩包
下载地址:http://ftp.gnu.org/gnu/gdb/ 这里我们下载的是gdb-7.8.1.tar.gz这个版本。
(2)第二步:编译并安装gdb
把gdb压缩包放到ubuntu之后,我们进入到解压生成的文件,如图 1示:
技术图片
输入以下命令:
./configure -target=arm-none-linux-gnueabi --prefix=/home/topeet/arm-linux-gdb/arm-linux-gdb生成Makefile。target为目标平台,prefix为安装路径。
技术图片
生成Makefile成功如图 3所示:
技术图片
输入make,编译gdb,编译成功如图 4所示:
技术图片
输入make install ,安装gdb,一会我们在ubuntu上启动的就是这个gdb,安装成功如图 5所示:
技术图片
进入gdb源码下的gdb/gdbserver目录,如图 6所示:

技术图片
输入以下命令:
./configure -target=arm-none-linux-gnueabi --prefix=/home/topeet/arm-linux-gdb/arm-linux-gdbserver
生成Makefile,target为目标平台,prefix为安装路径。
技术图片
然后执行make CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc命令,注意,这里交叉编译器一定要写绝对路径。
编译过程中会出现图 8错误:
技术图片
我们打开gdb/gdbserver路径下的config.h文件,注释掉196行左右的HAVE_SYS_REG_H这个宏定义,然后保存退出。如图 9所示:
技术图片
打开gdb/gdbserver路径下的linux-x86-low.c的C文件,注释掉116行#include头文件,然后保存退出。如图 10所示:
技术图片
再次编译输入make CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc,编译成功如图 11所示:
技术图片
编译完成后,使用make install 命令安装,安装完成后会在安装路径生成一个文件夹,如图 12所示:
技术图片
第三步,在ARM板上搭建远程调试环境
(1)把gdb/gdbserver下的gdbserver 拷贝到文件系统busybox的bin目录下,然后打包烧写生成的文件系统rootfs.tar.bz2
(2)编写测试程序hello.c
技术图片
编译测试程序,编译的时候要加-g参数,编译完成之后,我们把测试代码通过SSH放在开发板上,然后再测试代码所在的路径下输入以下命令在目标板启动服务器,其中192.168.1.5为ubuntu的IP,8000为端口号。启动成功如图 14所示:
技术图片
再测试程序所在目录启动ubuntu上的gdb,这里启动的gdb为我们刚刚安装的gdb,我们输入以下命令:
/home/topeet/arm-linux-gdb/arm-linux-gdb/bin/arm-none-linux-gnueabi-gdb hello

启动成功后如图 15所示:
技术图片
连接开发板,输入以下命令,target remote 192.168.1.3:8000 192.168.1.3为开发板的IP,8000为端口号。
技术图片
连接成功后开发板会打印以下信息,如图 17所示:
技术图片
接下来,我们就可以在ubuntu上使用命令来设置断点,单步调试开发板上的程序了,L 是显示程序,b 7 是在第七行设置断点,info b 是查看断点,c 是运行。
技术图片
在串口控制台可以看到对应的打印信息
技术图片
打断点的方式主要有以下几种:
?break 函数名:在某个函数的入口处添加断点
?break 行号:在指定行添加断点
?break文件名:行号:在指定文件的指定行添加断点
?break行号 if 条件:当条件为真时,指定行号的断点生效。
?查看我们打的断点,使用命令info breakpoints,可以看见我刚才打的断点
?删除断点,使用命令delete断点编号来完成
?运行程序,输入命令run
? 输入命令:print i,命令格式:print 变量名称。查看指定变量数值。
? 我们也可以对变量i进行监控,可以输入命令 watch i,命令格式:watch 变量名称。对指定变量进行监控。.
?next:单步运行程序,不进入子函数。
?step:单步运行程序,进去子函数。
?如果我们想继续调试呢,可以输入命令continue
?退出调试。可以使用命令quit
总结:
上面的命令也可以使用简写,如break可以简写成b,简写表如下:
技术图片

迅为i.MX6ULL开发板移植Gdb+Gdbserver调试

标签:ldd   小伙伴   版本   data   box   发行版   rootfs   www   启动   

人气教程排行