GDB ARM 交叉编译环境搭建

需求

需要使用 GDB 在本机来调试 ARM 环境

环境

需要安装交叉编译器,ARM 交叉编译器有很多种,这里安装其中一种。

1
sudo apt install gcc-arm-linux-gnueabi

编译时可能需要用到 Texinfo。

1
sudo apt install Texinfo

编译方法

  1. 首先下载 GDB,这里下载了最新的 GDB 10.1 版本
  2. 为了在本机调试 ARM 环境,需要编译出本机可用的 GDB 可执行文件,以及 ARM 端的 GDB Server。

./configure 配置说明:

--target 指定目标平台
--host 指定目标运行平台
--prefix 指定 make install 安装路径

CC 指定 C 语言编译器
CXX 指定 C++ 语言编译器

编译本机 GDB

首先解压 gdb-10.1.tar.xz 到 gdb-10.1 目录

然后进入 gdb-10.1 目录,配置 make,执行如下指令:

1
./configure --target=arm-linux-gnueabi --prefix="/???/gdb-10.1/build/`

这里是本机,所以不用指定 --host 选项和 CC 以及 CXX 变量的值,configure 会自动检测。

配置后即可进行编译和安装:

1
2
3
make
mkdir build # 安装到此目录
make install

编译完成后进入 build 目录,能够看到 arm-linux-gnueabi-gdb 可执行文件,使用 file 命令确认可执行文件的平台符合本机:

1
arm-linux-gnueabi-gdb: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a10a8de31b935a58a16cc7f653d13665a3166543, for GNU/Linux 3.2.0, with debug_info, not stripped

编译目标机 GDB Server

目标机执行 ARM 程序,如果需要调试 ARM,需要在目标机上安装 GDB Server,通常和 GDB 版本一致。

首先进入需要编译出 ARM 平台的 GDB,因为编译 GDB Server 过程会依赖 GDB 的编译文件。

重新解压 gdb-10.1.tar.xz 到一个新的目录(防止和刚编译的本机 GDB 文件冲突)gdb-10.1-arm 中

进入此目录,然后首先编译 GDB,这里和本机编译 GDB 时的 Make 配置不同,需要指定目标运行平台为 arm,以及编译器为交叉编译器:

1
CC="arm-linux-gnueabi-gcc" CXX="arm-linux-gnueabi-g++" ./configure --target=arm-linux-gnueabi --host="arm-linux-gnueabi" --prefix="/xxx/gdb-10.1/build"

配置后进行编译:

1
2
3
make
mkdir build
make install

编译后即可编译 GDB Server,进入 gdbserver 目录:

首先配置 Make:

1
CC="arm-linux-gnueabi-gcc" CXX="arm-linux-gnueabi-g++" ./configure --target=arm-linux-gnueabi --host="arm-linux-gnueabi" --prefix="/xxx/gdb-10.1/gdbserver/build"

然后编译、安装:

1
2
3
make
mkdir build # 安装到此目录
make install

编译后进入 build,可以看到 bin 目录,进入看到 arm-linux-gnueabi-gdbserver 可执行文件,使用 file 命令确认文件属于目标机平台:

1
arm-linux-gnueabi-gdbserver: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.3, BuildID[sha1]=330389c2fc884446a58ae1a3da4a6e2e1dd93da9, for GNU/Linux 3.2.0, with debug_info, not stripped

将 gdbserver 传入目标机即可。

作者

l0neman

发布于

2021-04-21

更新于

2021-04-21

许可协议

评论