Linux下交叉编译gdb和gdbserver
平台:tq2440
GCC: gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176)
这里过程中参考了下面两篇博文:
http://blog.csdn.net/hejianhua/article/details/7254836
http://blog.csdn.net/fly_qj/article/details/8272555
1、下载gdb
下载地址为:http://ftp.gnu.org/gnu/gdb/
我们以gdb-7.9.tar.xz 这个文件为例。
2、安装软件包
- textinfo
否则会提示makeinfo找不到。
安装方法:
sudo apt-get install textinfo
- libncurses5-dev
否则会出现如下错误:
configure: WARNING: no enhanced curses library found; disabling TUI
checking for library containing tgetent... no
configure: error: no termcap library found
make[]: *** [configure-gdb] Error
安装方法:
解决这个问题需要自己去新下载一套ncurses的最新代码,重新交叉编译出来,再拷到交叉gcc的库默认搜索路径下去就能解决。 wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.8.tar.gz tar xvf ncurses-5.8.tar.gz cd ncurses-5.8 ./configure --prefix=/root/work/tq2440/tools/gdb/ncurses-5.8/bin --host=arm-linux CC=arm-linux-gcc make&&make install cd bin cp -rf lib/*/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/lib/ cp -rf include/* /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include
3、编译安装gdb和gdbserver
- 目录结构
.
├── gdb # 存放编译产生的arm-linux-gdb可执行程序
├── gdb-7.9 # gdb和gdbserver的源码目录
├── gdb-7.9.tar.xz
├── gdb_build # 编译gdb时的中间编译文件
├── gdbserver # 存放编译生成的arm-linux-gdbserver可执行程序
├── gdbserver_build # 存放编译gdbserver时的编译结果
├── ncurses-5.8
└── ncurses-5.8.tar.gz
- 编译安装gdb
cd gdb_build
../gdb-7.9/configure --target=arm-linux --program-prefix=arm-linux- --prefix=/root/work/tq2440/tools/gdb/gdb
make
make install
注:--target=arm-linux意思是说目标平台是运行于ARM体系结构的linux内核;--program-prefix=arm-linux-是指生成的可执行文件的前缀,比如arm-linux-gdb,--prefix是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建,当然,权限足够的话。
生成的可执行程序存放在/root/work/tq2440/tools/gdb/gdb下:
gdb
├── bin
│ ├── arm-linux-gdb
│ └── arm-linux-run
├── include
│ └── gdb
├── lib
│ └── libarm-linux-sim.a
└── share
├── gdb
├── info
├── locale
└── man
可以对生成的arm-linux-gdb进行strip
strip arm-linux-gdb -o arm-linux-gdb-stripped
- 编译安装gdbserver
cd gdbserver_build
../gdb-7.9/gdb/configure --target=arm-linux --host=arm-linux --prefix=/root/work/tq2440/tools/gdb/gdbserver
cd gdbserver
make
make install
最后生成的可执行程序存放在/root/work/tq2440/tools/gdb/gdbserver目录下
gdbserver
└── bin
└── arm-linux-gdbserver
可以对arm-linux-gdbserver进行strip
arm-linux-strip gdbserver -o gdbserver-stripped
注意,这里必须使用strip的交叉版本,也就是arm-linux-strip。
到此,我们生成了两个重量级别的文件:arm-linux-gdb和gdbserver。它们的版本是一致的,这一点非常重要。我们需要将gdbserver下载到开发板中,——可以通过各种各样的手段,包括但不限于NFS。调试时需要在开发板中运行这个程序。同时在主机中执行arm-linux-gdb调试器。
下面是我编译出的arm-linux-gdbserver和arm-linux-gdb,可以用于tq2440远程调试:
http://files.cnblogs.com/files/pengdonglin137/tq2440_arm-linux-gdb%26arm-linux-gdbserver.7z
完。
Linux下交叉编译gdb和gdbserver的更多相关文章
- Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件
交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gd ...
- Linux下使用GDB调试程序
问题描述: Linux下使用GDB调试程序 问题解决: (1)生成调试文件 注: 使用命令 gdb IOStream.c -o IOStre ...
- Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读
环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...
- Linux下使用GDB进行调试
Linux下使用GDB进行调试的常用命令记于此. $ sudo su # g++ -g test.cpp -o test -pthread # gdb test <------- ...
- linux下使用gdb对php源码调试
title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概 ...
- Linux下用gdb 调试、查看代码堆栈
Linux中用gdb 查看代码堆栈的信息 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的. 调试的话输入: gd ...
- linux下的gdb调试工具--断点调试
到目前为止我们的调试手段只有一种: 根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,就基本上证明了自己假设的错误原因,就可以 ...
- 交叉编译gdb和gdbserver
从http://ftp.gnu.org/gnu/gdb/下载最新的gdb,我下载的是gdb-8.0. 编译aarch32(>armv5): #!/bin/bash export CC=arm-n ...
- NOI Linux下Emacs && gdb调试方法
1. 首先要配置emacs文件: (global-linum-mode t) (show-paren-mode t) (global-set-key (kbd "C-s") 'sa ...
随机推荐
- 【hdu3080】01背包(容量10^7)
[题意]n个物品,有wi和vi,组成若干个联通块,只能选取一个联通块,问得到m的价值时最小要多少空间(v).n<=50,v<=10^7 [题解] 先用并查集找出各个联通块. 这题主要就是v ...
- bzoj4756 [Usaco2017 Jan]Promotion Counting
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4756 [题解] dsu on tree,树状数组直接上 O(nlog^2n) # inclu ...
- Opencv 学习笔记之——鼠标,进度条操作
Opencv中提供一个鼠标调用的函数,SetMouseCallback()函数,它配合一个回调函数来实现鼠标操作的功能. 首先看一下SetMouseCallback的函数原型: c++: void ...
- Google Breakpad: 实战crash .
Google Breakpad: 实战crash . http://blog.csdn.net/zm_21/article/details/24795205 C/C++程序最棘手的时候就是一个字“挂” ...
- (转)Oracle中判断某字段不为空及为空的SQL语句
比如 insert into table a (a1,b1)values("a1",''); 对于这种情况,因为表里存的是'',其实是没有内容的,要查询这个字段,不能直接使用 se ...
- [ 总结 ] Linux系统测试硬盘I/O
检测硬盘I/O相对来说还是一个比较抽象的概念,但是对系统性能的影响还是至关重要的. (1)使用hdparm命令检测读取速度: hdparm命令提供了一个命令行的接口用于读取和设置IDE和SCSI ...
- quartz 配置运行
这篇文章是对quartz 2.2.1进行配置 分为spring 整合版本和QuartzInitializerServlet整合版本 首先是QuartzInitializerServlet整合版本 主要 ...
- Python 进阶 之 traceback模块
Traceback模块官方英文描述: Help on module traceback: NAME traceback - Extract, format and print information ...
- 串行写队列的MYSQL大文本参数
public void AsyncWriteDataBase() { var spName = ""; while (true) { try { var jsonText = Re ...
- Mysql中大表添加索引的办法
Hash索引与 Btree索引的区别http://database.51cto.com/art/201010/229525.htm Creating Indexes/Sorting on very l ...