• 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[1]: *** [configure-gdb] Error 1

    安装方法:

    解决这个问题需要自己去新下载一套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-gdbgdbserver。它们的版本是一致的,这一点非常重要。我们需要将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

     完。

  • 相关阅读:
    P2197 nim游戏
    P3942 将军令
    UVA10228 模拟退火
    关于欧拉定理的证明以及扩展欧拉定理的证明及其应用
    秒杀架构模型设计
    大型网站如何防止崩溃,解决高并发带来的问题
    序列化与反序列号
    普通常用知识汇总
    接口和抽象类的区别
    详解C#break ,continue, return
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/4751279.html
Copyright © 2020-2023  润新知