交叉编译不同指令架构 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编译出交叉编译工具的时间可能比较长