美文网首页Arm
[MDM9X07] 交叉编译GDB

[MDM9X07] 交叉编译GDB

作者: LittleFat | 来源:发表于2017-05-10 23:03 被阅读206次

    参考
     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

        本文链接:https://www.haomeiwen.com/subject/jwkntxtx.html