GDB ARM 交叉编译环境搭建
需求
需要使用 GDB 在本机来调试 ARM 环境
环境
需要安装交叉编译器,ARM 交叉编译器有很多种,这里安装其中一种。
1 | sudo apt install gcc-arm-linux-gnueabi |
编译时可能需要用到 Texinfo。
1 | sudo apt install Texinfo |
编译方法
- 首先下载 GDB,这里下载了最新的 GDB 10.1 版本
- 为了在本机调试 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 | make |
编译完成后进入 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 | make |
编译后即可编译 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 | make |
编译后进入 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 传入目标机即可。
GDB ARM 交叉编译环境搭建