交叉编译适配mips架构的GDB

交叉编译GDB

1.下载GDB源码

在GDB官网寻找:http://www.gnu.org/software/gdb/download/

版本结合你安装在开发板上的gdbserver来定,我的板子上有openwrt系统,可以直接安装gdbserver,gdbserver –version可以查看其版本,我这里是7.8的。

2.解压并创建安装目录

tar zxvf gdb-7.8.tar.gz

cd gdb-7.8/

mkdir gdb7.8_mipsel

我的板子是mips架构的。

3.编译安装

GDB源码编译安装也属于configure系列的,所以结合之前编译PHP源码、swoole源码的经验,加上最近学习了一部分shell脚本,我们可以将编译安装命令写成一个简单的shell脚本(python也可以,顺便熟悉一下python,~_~),编译安装成功后在gdb7.8_mipsel目录如下所示:

这里写图片描述

以下是编译安装脚本,以供参考:

    #!/bin/bash

    # Copyright (C) 2018-2019 ZY

    mkdir gdb7.8_mipsel

    echo "begin to configure..."

    CC=mipsel-openwrt-linux-uclibc-gcc AR=mipsel-openwrt-linux-uclibc-ar LD=mipsel-openwrt-linux-uclibc-ld RANLIB=mipsel-openwrt-linux-uclibc-ranlib STRIP=mipsel-openwrt-linux-uclibc-strip ./configure --host=mipsel-openwrt-linux-uclibc --prefix=/home/ubuntu/gdb-7.8/gdb7.8_mipsel/

    if [ -e "Makefile" ]; then

        echo "=============================="

        echo "configure ok,begin to make..."

        echo "=============================="

        sleep 1

        make

    else

        echo "=============================="

        echo "configure failed"

        echo "=============================="

        sleep 1

    fi

    if [ -e "./gdb/gdb" ]; then

        echo "=============================="

        echo "make ok,begin to make install..."

        echo "=============================="

        sleep 1

        make install

    else

        echo "=============================="

        echo "make install failed"

        echo "=============================="

        sleep 1

    fi

4.可能遇到的错误解决方法

make编译时遇到:

configure: error: no termcap library found

很明显,缺少termcap库,结合之前交叉编译其它源码的经验,没有该库则交叉编译该库,然后将相应的头文件和库文件拷贝到交叉编译工具链相关的目录下即可。

(1).下载termcap

http://ftp.gnu.org/gnu/termcap/?C=D;O=A

我将其放在gdb的同级目录下,然后:

tar zxvf termcap-1.3.tar.gz

cd termcap-1.3/

(2).将上面的编译安装gdb的脚本改一下
    !/bin/bash

    # Copyright (C) 2018-2019 ZY

    mkdir termcap_mipsel

    echo "begin to configure..."

    CC=mipsel-openwrt-linux-uclibc-gcc AR=mipsel-openwrt-linux-uclibc-ar LD=mipsel-openwrt-linux-uclibc-ld RANLIB=mipsel-openwrt-linux-uclibc-ranlib STRIP=mipsel-openwrt-linux-uclibc-strip ./configure --host=mipsel-openwrt-linux-uclibc --prefix=/home/ubuntu/termcap-1.3/termcap_mipsel/

    if [ -e "Makefile" ]; then

        echo "=============================="

        echo "configure ok,begin to make..."

        echo "=============================="

        sleep 1

        make

    else

        echo "=============================="

        echo "configure failed"

        echo "=============================="

        sleep 1

    fi

    if [ -e "termcap.o" ]; then

        echo "=============================="

        echo "make ok,begin to make install..."

        echo "=============================="

        sleep 1

        make install

    else

        echo "=============================="

        echo "make install failed"

        echo "=============================="

        sleep 1

    fi
(3).对于最后的权限不够无法删除PC机上termcap.h文件时

不需理会,我们不需要将termcap安装到我们的PC机上:

这里写图片描述

然后在网上查到这样一个命令:

mipsel-openwrt-linux-gcc -print-file-name=libc.a找到我们要将头文件和库文件拷贝的位置,比如我这里:

这里写图片描述

然后将相关的头文件和库文件拷贝到对应的位置即可使gdb源码make成功,比如我这里:

cp libtermcap.a /opt/OpenWrt-Toolchain-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib/gcc/mipsel-openwrt-linux-uclibc/4.8.3/

cp termcap.h /opt/OpenWrt-Toolchain-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/include/

当然,这些命令都可以结合脚本放在脚本文件中执行,我这里就不再展示了。

5. 可能需要交叉编译GDBSERVER,将其安装在开发板上

我的开发板上有openwrt系统,可以直接:

opkg update

opkg install gdbserver

有的板子可能无法直接安装,或者不喜欢、不能用这个版本的gdbserver的,编译gdb源码移植gdbserver即可,如果编译出来的gdbserver太大则需要精简,关于如何精简,这里不再多说,我们本次总结的重点不在这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值