arm gdb linux
2013-09-26 15:42:08 JoeBlackzqq 阅读数 1126

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


2013-12-06 21:58:53 pb09013037 阅读数 446

移植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


2012-10-17 16:44:47 ghostyu 阅读数 4084

移植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


2011-09-24 22:32:28 zishare 阅读数 872

先从http://www.gnu.org/software/gdb/下载了gdb 7.3.1源代码。

拷贝到linux虚拟机中后,解压到gdb-7.3.1目录,进入这个目录

[root@localhost gdb-7.3.1]# ./configure --host=arm-linux --target=arm-linux

-------------------------------------------------------------------------------------

make出现了以下错误提示:

checking for library containing waddstr... no
configure: WARNING: no enhanced curses library found; disabling TUI
checking for library containing tgetent... no
configure: error: no termcap library found
make[1]: *** [configure-gdb] 错误 1
make[1]: Leaving directory `/gdb/gdb-7.3.1'
make: *** [all] 错误 2
[root@localhost gdb-7.3.1]#

-------------------------------------------------------------------------------------

从gnu下载termcap,最新版本是1.3.1 2002-02-25

直接用下面几条命令生成lib

arm-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g termcap.c
arm-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g tparam.c
arm-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g version.c
arm-linux-ar rc libtermcap.a termcap.o tparam.o version.o

然后拷贝到arm-linux的lib目录下,不知道目录就用arm-linux-gcc -print-search-dirs显示出来看看:

[root@localhost termcap-1.3.1]# arm-linux-gcc -print-search-dirs
install: /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/
programs: =/usr/local/arm/3.4.1/libexec/gcc/arm-linux/3.4.1/:/usr/local/arm/3.4.1/libexec/gcc/arm-linux/3.4.1/:/usr/local/arm/3.4.1/libexec/gcc/arm-linux/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/:/usr/libexec/gcc/arm-linux/3.4.1/:/usr/libexec/gcc/arm-linux/:/usr/lib/gcc/arm-linux/3.4.1/:/usr/lib/gcc/arm-linux/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/arm-linux/3.4.1/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/
libraries: =/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/:/usr/lib/gcc/arm-linux/3.4.1/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/arm-linux/3.4.1/:/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/
[root@localhost termcap-1.3.1]#

 

重新到gdb源代码目录下,make就可以成功了

将生成的可执行文件gdb改个名,如arm-linux-gdb

或者拷贝到arm板上(就不用改名了)

 

2013-08-27 17:53:14 skc361 阅读数 472

    如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在Linux上运行,界面和功能与windows上同类软件相似的开发平台eclipse。

    eclipse是著名的跨平台的集成开发环境(IDE),最初是由IBM公司开发的替代商业软件Visual Age For Jave的下一代开发环境。2001年,IBM将eclipse贡献给开源社区,现在由eclipse基金会管理。2005年7月,eclipse稳定版3.1.0发布,目前最新的稳定版本是3.4。

    eclipse本身只是一个框架平台,最初主要用于java语言的开发。但是众多插件的支持使得eclipse同样可以用来开发其他的语言,如c/c++、c#、perl、cobol的等等。cdt(c/c++ development toolkit)就是支持c/c++开发的插件。许多软件开发商也以eclipse为框架推出了自己的集成开发环境。由于eclipse平台用java实现,所以运行时需要jre(java runtime environment)的支持。下面我们以ubuntu(linux发行版的一种)为例,介绍如何在linux上使用 eclipse+cdt来进行嵌入式Linux应用程序的开发。

一、安装软件

    在ubuntu下安装软件有两种方法:使用apt-get来自动安装或手动安装。用户使用自动安装非常方便,适合初学者。但是安装过程过于依赖资源网站的连接状况,可能需要耗费过多的时间。这里我们推荐手动安装的方式,花的时间比较短。

1、安装jdk

    jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre. ubuntu缺省安装的gnu版本的jre运行效率不高,所以我们需要安装sun公司的jre. 首先从sun的网站上(http://java.sun.com/javase/downloads/index.jsp)下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:

    # mkdir -p /opt/java 
    # ./jdk-6u7-linux-i586.bin // 执行自解压文件,生成目录
    # mv jdk1.6.0_07 /opt/java // 把目录移到/opt/java下
    # cd /opt/java
    # ln -s jdk1.6.0_07 jdk 
    # mv /etc/alternatives/java /etc/alternatives/java.gnu
    # ln -s /opt/java/jdk/bin/java /etc/alternatives/java
    # export JAVA_HOME=/opt/java/jdk // 设置环境变量

2、安装eclipse和cdt

    从eclipse网站上(http://www.eclipse.org/)下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip

    # cd /opt
    # tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解压生成eclipse目录
    # export PATH=/opt/eclipse:$PATH
    # mkdir -p /opt/cdt
    # cd /opt/cdt
    # unzip cdt-master-5.0.0.zip
    # cp -r plugins/* /opt/eclipse/plugins/
    # cp -r features/* /opt/eclipse/features/

二、创建c/c++工程

    假设我们已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程。为了更直观的说明,我们截取了相关的图片:

进入eclipse安装路径后,运行eclipse

eclipse运行界面

创建c 工程

使用缺省的Linux GCC工具链

进入c/c++ 界面

添加源代码文件1

添加源代码文件2

编辑代码

设置工程属性,指定交叉工具链1

设置工程属性,指定交叉工具链2

设置工程属性,指定交叉工具链3

编译工程
 
已生成arm平台可执行代码

配置调试选项

 

 
设置Debugger和 GDB debugger选项

设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)

 

在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致
点击Debug,进入调试界面

执行到断点

    eclipse的调试界面和操作和在windows下开发类似,相信到了这一步,大家已经可以很方便来进行应用程序的开发了。


Linux - mipsel/mips/arm/armeb - gdb compile

阅读数 1579

Ifyoudon’tknowwhat’sbuildroot?,pleaseredirecttohttps://www.uclibc.org/Howtoinstallbuildrootroot@lab:~#uname-aLinuxlab4.3.0-kali1-686-pae#1SMPDebian4.3.5-1kali1(2016-02-11)i686G

博文 来自: u011130746

eclipse + cdt + gdb 进行arm linux 交叉调试

阅读数 384

eclipse+cdt+gdb进行armlinux交叉调试   如何使用eclipse进行嵌入式Linux的开发习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功

博文 来自: transistor0

eclipse + cdt + gdb 进行arm linux 交叉调试

阅读数 532

作者:Garfield_Trump转自:http://blog.chinaunix.net/uid-20671208-id-1580649.html  如何使用eclipse进行嵌入式Linux的开发习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要

博文 来自: whw8007

eclipse + cdt + gdb 进行arm linux 交叉调试

阅读数 825

http://blog.csdn.net/gameboy12615/archive/2010/06/04/5648185.aspx  如何使用eclipse进行嵌入式Linux的开发习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就

博文 来自: samantha_sun

GDB/ARM/Serial Port /Linux app on console

阅读数 51

NormallyGDBserverislisteningonARM/LinuxTCPserverfortargetwhileHost/WindowsorLinux/X86willrungdbclientthroughTCP.Note,youmustusethesameGDBversionsonbothsides!Whenthereis...

博文 来自: hushui
没有更多推荐了,返回首页