[MDM9X07] 交叉编译GDB

参考
 https://how-to-build-for-arm.wikispaces.com/gdb

0 崩溃,崩溃!

应用崩溃,又无从下手的时候,逼着自己交叉编译mdm9x07平台的gdb。

1 环境准备

  • mdm9x07 toolchains
  • gdb-7.6.tar.gz
  • debian 8.1
    $ wget https://ftp.gnu.org/gnu/gdb/gdb-7.6.tar.gz

2 配置

将交叉工具链配置到环境变量,例如:

export MDM9X07_PATH=/home/bb/tools/MDM9X07/usr/bin/arm-oe-linux-gnueabi
export PATH=${MDM9X07_PATH}:${PATH}

验证arm-oe-linux-gnueabi-gcc 是否可用

bb@bb:~$ arm-oe-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-oe-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/bb/tools/MDM9X07/usr/bin/arm-oe-linux-gnueabi/../../libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.9.2/lto-wrapper
Target: arm-oe-linux-gnueabi
  ... ... ... ... ...
gcc version 4.9.2 (GCC) 

3 工作目录

$ export GDB_SRC=~/workbench/gdb/src
$ export GDB_BUILD=~/workbench/gdb/build
$ mkdir -pv ~/workbench/gdb
$ mkdir $GDB_SRC && mkdir $GDB_BUILD
$ cd $GDB_SRC
$ tar -pxzf gdb-7.6.tar.gz ~/workbench/gdb/src

4 环境变量

export TARGETMACH=arm-oe-linux-gnueabi
export CROSS=arm-oe-linux-gnueabi
export CC=${CROSS}-gcc
export LD=${CROSS}-ld
export AS=${CROSS}-as

另外因为是交叉编译,需要告诉编译器以及链接器查找路径,使用--sysroot=配置:

C 和C++都需要配置,gdb中子模块有用到c++的

export CFLAGS=--sysroot=/home/bb/tools/mdm9607
export CXXFLAGS=--sysroot=/home/bb/tools/mdm9607  

5 配置

准备工作完成,开始生成makefile
./configure --with-build-sysroot=/home/bb/tools/mdm9607 --prefix=/home/bb/workbench/gdb/build --host=$TARGETMACH --target=$TARGETMACH --disable-tui

6 汇总编写make.sh

#!/bin/sh

export TARGETMACH=arm-oe-linux-gnueabi
export CROSS=arm-oe-linux-gnueabi
export CC=${CROSS}-gcc
export LD=${CROSS}-ld
export AS=${CROSS}-as

export CFLAGS=--sysroot=/home/bb/tools/me3630/mdm9607
export CXXFLAGS=--sysroot=/home/bb/tools/me3630/mdm9607

./configure --with-build-sysroot=/home/bb/tools/me3630/mdm9607 --prefix=/home/bb/workbench/gdb/build --host=$TARGETMACH --target=$TARGETMACH --disable-tui

7 安装

顺利的话,可编译通过。继续执行安装即可:
make install

在安装目录下能够看到有如下:
bb@bb:~/gdb$ tree ./
├── bin
│ ├── gdb
│ ├── gdbserver
│ └── run
├── include
│ ├── ansidecl.h
│ ├── bfd.h
│ ├── bfdlink.h
│ ├── dis-asm.h
│ ├── gdb
│ │ └── jit-reader.h
│ └── symcat.h
├── lib
│ ├── libarm-oe-linux-gnueabi-sim.a
│ ├── libbfd.a
│ ├── libbfd.la
│ ├── libiberty.a
│ ├── libopcodes.a
│ └── libopcodes.la
└── share
... ... ... ...

53 directories, 86 files

验证文件格式:

bb@bb:~/gdb/bin$ file gdb
gdb: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=5eb891638b2f00228d24f1ecffccbac40be558b0, not stripped

8 问题

不顺利则会出现一些错误,可能有:

  • arm-oe-linux-gnueabi-gcc 没有-v 和 -qversion 选项, 去掉
    for ac_option in --version -v -V -qversion; do ==>
    for ac_option in --version -v; do
  • 当前系统无法执行编译后的程序
    if { ac_try='./$ac_file' ==>
    if { ac_try='file ./$ac_file'

注: 全篇核心在--sysroot配置

你可能感兴趣的:([MDM9X07] 交叉编译GDB)