移植gdb到DM368 IPNC中 linux arm gdb
From: http://blog.csdn.net/ghostyu/article/details/8081897
移植gdb到嵌入式的ipnc中,大多数人习惯使用printf调试,但是遇到像”segment fault“这的错误也是后就很难定位,这时候gdb的作用就体现出来了
在pc使用gdb调试应用程序前,应用程序编译是需带上 gcc -g参数,就是编译带有调试信息的程序,不然使用gdb是找不到程序的symbol的
在arm中使用gdb也不例外,也要加上arm_v5t_le-gcc -g参数,只不过,arm上linux不同于pc,嵌入式的gdb采用这样的调试方式:
在arm中运行gdbserver
在pc上运行gdbserver对应的arm-linux-gdb,这样的方式来调试程序。
所以的调试操作均在pc上完成,但是程序的输出还是在arm上。
现在来移植gdb到dm368上
1、下载gdb源码,目前的最高版本的gdb-7.5,下载地址:http://www.gnu.org/software/gdb/download/
2、解压到合适的文件夹下,注意不要放到window与linux共享的目录下即可:tar -xvzf gdb-7.5.tar.gz
3、进入gdb-7.5源码目录,然后配置编译arm-linux-gdb
我的配置是这样的:./configure --target=arm-linux --prefix=/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5 -v
target是指编译的目标平台
prefix是指安装编译好的程序目录,我将它安装到arm_v5t_le工具链的目录。
这里注意了,现在配置编译的不是gdbserver,而是gdbserver对应的需要运行在主机pc上的arm-linux-gdb,虽然linux上已经有gdb命令,但是这个gdb命令式没法跟gdbserver交互的。
编译成功后会在prifix设定的目录下产生arm-linux-gdb可执行程序,如图
target_board 和readme是我自己创建的。
4、进入gdb-7.5/gdb/gdbserver目录,配置,然后交叉编译运行在arm上的gdbserver
4.1在交叉编译gdbserver之前,先进行一些设置:
添加刚才编译好的arm-linux-gdb到PC linux的PATH中
PATH="/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5/bin:$PATH"
4.2配置
./configure --target=arm-linux --host=arm-linux
4.3修改config.h
编译是会产生一个错误,说找不到sys/reg.h
所以这里修改一下config.h,不要去使用reg
#vim config.h
//#define HAVA_SYS_REG_H //注释此句
4.4交叉编译
make CC=arm_v5t_le-gcc
5、将交叉编译好的gdbserver复制到目标文件系统的/usr/locaol/bin目录下,其他地方也可以,只要能在shell中找到gdbserver即可
测试:
1、随便写一个c文件,然后编译
arm_v5t_le-gcc -g test.c
得到a.out,复制到目标文件系统中
2、在目标板上执行
gdbserver 192.168.1.227:1234 a.out
192.168.1.227为目标板ip地址,1234是没有被占用的tcp端口
意思就是创建一个调试服务器,一边主机pc上的arm-linux-gdb能够连接这个服务器来调试a.out
3、在主机pc上执行
arm-linux-gdb a.out
然后在gdb的shell中输入
target remote 192.168.1.227:1234
连接成功后目标板上会打印连接信息,如图
至此,就可以按照通常gdb的命令调试程序啦
附录1:调试时出现的警告
warning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.
warning: Could not load shared library symbols for /lib/ld-linux.so.3.
Do you need "set solib-search-path" or "set sysroot"?
忽略,目前没有发现影响什么。
附录2:gdb调试手册和gdb调试命令的pdf下载,这两篇是我在网上找的,觉得比较好
gdb调试手册:http://www.kuaipan.cn/file/id_48923272389085122.html
gdb调试命令:http://www.kuaipan.cn/file/id_48923272389085121.html
移植gdb到DM368 IPNC中 linux arm gdb相关推荐
- linux单步调试方法,linux下gdb单步调试(中).doc
linux下gdb单步调试(中) linux下gdb单步调试(中) linux下gdb单步调试(中) 一.设置断点( BreakPoint ) 我们用 break 命令来设置断点.正面有几点设置断点的 ...
- linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题
本文转载自微信公众号「程序喵大人」,作者程序喵大人 .转载本文请联系程序喵大人公众号. 在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c++中如何使用 ...
- 通过vscode进行嵌入式linux arm开发板gdb调试
下载和安装vscode, 下载 vscode for windows 地址: Visual Studio Code - Code Editing. Redefined 安装 "remote ...
- 在Linux中如何使用gdb调试C程序
无论多么有经验的程序员,开发的任何软件都不可能完全没有 bug.因此,排查及修复 bug 成为软件开发周期中最重要的任务之一.有许多办法可以排查 bug(测试.代码自审等等),但是还有一些专用软件(称 ...
- linux下gdb单步调试
用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...
- Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲
Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...
- mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译
0.Part2:mDNS实现之Bonjour与Avahi(二)--win/linux/arm交叉编译_平凡之路-CSDN博客1.BonjourBonjour - Apple Developer● 源码 ...
- linux的gdb远程调试,嵌入式Linux的GDB远程调试如何实现呢?
有道启新嵌入式研究院--远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试s ...
- 应聘linux/ARM嵌入式开发岗位
**************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...
最新文章
- kaggle为什么总是难以拿到金牌
- Google 开源技术protobuf 简介与样例
- extract()函数:用于从一个date或者interval类型中截取到特定的部分
- python的优点有哪些-Python有哪些技术上的优点?比其他语言好在哪儿?
- Linux非root用户如何使用80端口启动程序
- 5加载stm32 keil_【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)...
- php 加密视频播放地址,如何在PHP中实现Clear-Key视频加密并以HTML格式播放
- Apple Pencil平替哪个好?Apple Pencil平替笔推荐
- 站群网站八大盈利模式浅析
- 提升技能,升级思维,你学知识我送T恤,订阅专栏免费领51CTO定制T恤
- 微软怎么设计Exchange 2003的体系结构
- 平行四边形的效果实现
- 使用echarts做气泡图
- 从事互联网产品运营所需的8条技能
- 洛谷P2530 [SHOI2001]化工厂装箱员
- mybatis-plus和mysql
- NOIP2011 瑞士轮 题解
- shmget - 共享内存
- 自动驾驶测绘资质的信息安全要求,真的来了
- 制作圆形图片,你会以下几种?