MIPS平台上移植和使用GDB调试工具

在网站 http://ftp.gnu.org/gnu/gdb/ 上下载gdb-xxx.tgz源码包。任一个版本的都可,但不要太老。以下是我的交叉编译环境:

X86版本:ubuntu-12.04 (gcc),IP:192.168.0.236

开发板:MT7688(mipsel-linux-gcc) IP:192.168.0.191

GDB版本:gdb-7.3a.tar.gz

 

一、前言

嵌入式环境下使用GDB进行调试时,需要两个工具:xxx-gdb和gdbserver。xxx-gdb是运行在你的x86平台上的,host不需要设置,系统会默认使用你的x86环境参数;而gdbserver是运行在开发板环境下的,所以需要用host项来设置最终生成的可执行文件的运行环境。详见下文。

 

二、编译生成xxx-gdb

1、配置configure生成Makefile

        tar -xvf gdb-7.3a.tar.gz

        cd gdb-7.3

        ./configure --target=mipsel-linux --prefix=/home/zqjun/gdb-mips

(--target配置gdb的目标平台;--host参数指定最终生成可执行文件的运行环境,因为gdb是在x86平台上运行的,所以此处不设置host则默认使用x86平台参数;)

说明:configure的参数--build --target --host

    --build=BUILD     configure for building on BUILD [guessed]

    build就是你正在使用的平台,一般可以不用设置。

 

    --host=HOST       cross-compile to build programs to run on HOST [BUILD]

    host就是你编译好的程序所运行的平台,注意它跟target的区别。如我的程序是一个运行在MIPS平台上的程序,编译器为mipsel-linux-gcc,所以就要把host设为mipsel-linux。

 

    --target=TARGET   configure for building compilers for TARGET [HOST]

    target就是你想处理的程序所运行的平台,如我的程序是一个运行在MIPS平台上的程序,编译器为mipsel-linux-gcc,所以就要把target设为mipsel-linux。

 

    --prefix=PREFIX    install architecture-independent files in PREFIX [/usr/local]

    prefix配置安装路径,如果没有指定路径,则默认安装在/usr/local目录下。

 

2、make;

3、make install.

    此时会在/home/zqjun/gdb-mips目录下生成mipsel-linux-gdb工具,拷贝到mips交叉编译工具链所在的目录即可。

 

三、编译gdbserver

        cd gdb-7.3/gdb/gdbserver

        ./configure --target=mipsel-linux --host=mipsel-linux

说明:因为gdbserver是在嵌入式开发板上运行,因此要设置host项为开发板所对应的运行环境mipsel-linux。

        make

编译好了之后把gdbserver挎到开发板相应目录下(或者nfs挂载的目录下)备用。

 

四、开始GDB调试

1、挂载NFS

    #mount -t nfs -o nolock 192.168.0.236:/home/zqjun/nfs_mips /nfs

    注:上面的命令是在开发板的终端上执行。

 

2、在开发板上运行gdbserver
    在终端上切换到nfs目录下,把要运行的demo及其依赖环境等也都放置在nfs目录下。

#cd /nfs
#./gdbserver 192.168.0.236:1234 demo

:192.168.0.236为ubuntu主机的IP,在开发板上的MIPS系统的1234端口开了一个调试进程,demo为开发上运行的程序。开发板终端上执行以上命令后,会打印输出:

    Process asr_sample_mips created; pid = 1450

    Listening on port 1234

 

3、在ubuntu主机上运行gdb

        #cd /home/zqjun/nfs_mips /nfs

        #mipsel-linux-gdb demo

        (gdb) target remote 192.168.0.191:1234

:192.168.0.191为开发板的IP,如果接连接成功,开发板上会输出如下信息:

        Remote debugging from host 192.168.0.236

至此,gdb调试环境打通,可以开始调试了。

 

五、我在调试过程中遇到的两个错误:

1、错误1:

(gdb) c

Continuing.

warning: Could not load shared library symbols for /media/mmcblk0p1/taidi_asr/libs/libmsc.so.

Do you need "set solib-search-path" or "set sysroot"?

错误原因:nfs目录下gdb运行时没有找到程序所需要的libmsc.so,提示需要设置“set solib-search-path”。

解决办法

    (gdb) set solib-search-path /home/zqjun/nfs_mips/libs/

可使用info sharedlibrary 查看当前已生效的共享库路径

MIPS平台上移植和使用GDB调试工具_第1张图片

 

2、错误2:

    Program received signal SIG32, Real-time event 32. 

解决方法:在进入gdb之后,运行程序之前,输入handle SIG32 nostop noprint命令,可以让程序接收到sig32信号时,不挂起,也不会连续输出这条日志信息了。

 

你可能感兴趣的:(Linux,Working,Notes)