avatar

Catalog
使用buildroot交叉编译不同指令架构 gdb/gdbserver

交叉编译不同指令架构 gdb/gdbserver

一、运行环境对内核版本无要求

以mips64为例,其他架构类似

  • wget https://ftp.gnu.org/gnu/gdb/gdb-7.11.tar.gz
  • tar -xvf gdb-7.11.tar.gz
  • cd gdb-7.11
  • sudo apt-get install gcc-mips64-linux-gnuabi64
  • ./configure –host=mips64-linux CC=mips64-linux-gnuabi64-gcc LD=mips64-linux-gnuabi64-ld AR=mips64-linux-gnuabi64-ar LDFLAGS=”-static” –prefix=/home/gdbnew/mips64-gdb
    • CC LD AR等均需指定为mips64交叉编译器
    • LDFLAGS指定为静态编译
    • –prefix指定生成的二进制存放的路径

本做法是可以成功编译出gdb以及gdbserver,但是我将其放到目标设备上运行时会出现“Kernel too old”的错误,猜测应该是编译二进制的交叉编译工具的内核版本太高,和目标运行环境不适配

二、使用指定内核以及libc版本

以mips64为例,其他架构类似

  • 下载安装配置buildroot

    安装依赖

    • apt-get install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1g-dev exuberant-ctags g++ texinfo patch vim libtool bc

    下载源码

    • git clone https://github.com/buildroot/buildroot.git

    进行编译的配置

    • cd buildroot
    • make clean
    • make menuconfig
    • 在图形界面对内核版本以及libc等进行合理配置
    • make

    编译完成后在buildroot/output/host/usr/bin目录下可以看到交叉编译工具,mips64的编译器就是该目录下的mips64-linux-gcc

  • 编译gdb/gdbserver

    • wget https://ftp.gnu.org/gnu/gdb/gdb-7.11.tar.gz
    • tar -xvf gdb-7.11.tar.gz
    • cd gdb-7.11
    • ./configure –host=mips64-linux CC=mips64-linux-gcc LD=mips64-linux-ld AR=mips64-linux-ar LDFLAGS=”-static”
      • CC LD AR等均需指定为buildroot生成的mips64交叉编译器
      • LDFLAGS指定为静态编译
      • –prefix指定生成的二进制存放的路径
    • make
    • make install

本方法编译出的gdb/gdbserver可以指定交叉编译工具的内核版本,不会出现内核不适配这样的问题,但buildroot编译出交叉编译工具的时间可能比较长


Comment