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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zqj6893/article/details/84662579

在网站 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 查看当前已生效的共享库路径

 

2、错误2:

    Program received signal SIG32, Real-time event 32. 

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

 

展开阅读全文

关于QT在mips平台上的移植

05-28

我成功编译完qt源码后rnrnqmake -projectrnQFileInfo::absolutePath: Constructed with empty filenamernroot@debian:/home/qttest/helloworld# qmakernroot@debian:/home/qttest/helloworld# makernrn/opt/qt4.5.1/bin/uic widget.ui -o ui_widget.hrnmipsel-linux-g++ -c -pipe -mips32 -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qt4.5.1/mkspecs/qws/linux-mips-g++ -I. -I/opt/qt4.5.1/include/QtCore -I/opt/qt4.5.1/include/QtNetwork -I/opt/qt4.5.1/include/QtGui -I/opt/qt4.5.1/include -I. -I. -I. -o main.o main.cpprnmipsel-linux-g++ -c -pipe -mips32 -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qt4.5.1/mkspecs/qws/linux-mips-g++ -I. -I/opt/qt4.5.1/include/QtCore -I/opt/qt4.5.1/include/QtNetwork -I/opt/qt4.5.1/include/QtGui -I/opt/qt4.5.1/include -I. -I. -I. -o widget.o widget.cpprn/opt/qt4.5.1/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qt4.5.1/mkspecs/qws/linux-mips-g++ -I. -I/opt/qt4.5.1/include/QtCore -I/opt/qt4.5.1/include/QtNetwork -I/opt/qt4.5.1/include/QtGui -I/opt/qt4.5.1/include -I. -I. -I. widget.h -o moc_widget.cpprnmipsel-linux-g++ -c -pipe -mips32 -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qt4.5.1/mkspecs/qws/linux-mips-g++ -I. -I/opt/qt4.5.1/include/QtCore -I/opt/qt4.5.1/include/QtNetwork -I/opt/qt4.5.1/include/QtGui -I/opt/qt4.5.1/include -I. -I. -I. -o moc_widget.o moc_widget.cpprnmipsel-linux-g++ -Wl,-O1 -Wl,-rpath,/opt/qt4.5.1/lib -o helloworld main.o widget.o moc_widget.o -L/opt/qt4.5.1/lib -lQtGui -L/opt/qt4.5.1/lib -lQtNetwork -lQtCore -lpthread rn/home/mips-4.3/bin/../lib/gcc/mips-linux-gnu/4.3.2/../../../../mips-linux-gnu/bin/ld: warning: libz.so.1, needed by /opt/qt4.5.1/lib/libQtGui.so, not found (try using -rpath or -rpath-link)rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `deflateInit_'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `deflateInit2_'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `compress'rn/opt/qt4.5.1/lib/libQtCore.so: undefined reference to `uncompress'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `deflate'rn/opt/qt4.5.1/lib/libQtCore.so: undefined reference to `compress2'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `deflateEnd'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `crc32'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `inflate'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `inflateInit2_'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `inflateInit_'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `inflateEnd'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `inflateReset'rn/opt/qt4.5.1/lib/libQtGui.so: undefined reference to `deflateReset'rncollect2: ld returned 1 exit statusrn这是怎么回事? 论坛

没有更多推荐了,返回首页