ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver
gdb是一款开源的、强大的、跨平台的程序调试工具。主要用于在程序运行时对程序进行控制和检查,如设置断点、单步执行、查看变量值、修改内存数据等,从而帮助开发者定位和修复代码中的错误。
gdbserver则是GDB的一个辅助工具,主要用于调试嵌入式系统或者没有图形界面的目标系统上的程序。GDBServer在目标设备上运行,将目标程序的状态信息通过网络发送给宿主机上的GDB,使GDB能够像调试本地程序一样调试远程的目标程序。这样,开发人员就可以在宿主机上使用GDB的各种功能,而不需要在目标设备上安装和运行复杂的调试环境。
说明:本教程适用于ubuntu环境下交叉编译gdbserver,目标架构为aarch64小端。
一、准备阶段
根据需求,准备gdb源代码和aarch64-linux-gnu交叉编译工具链。
博主选择的gdb源代码以及aarch64-linux-gnu交叉编译工具链分别是,gdb8.3和gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu.tar.xz(aarch64小端)
gdb源代码地址:https://ftp.gnu.org/gnu/gdb/
交叉编译工具链下载地址:https://developer.arm.com/downloads/-/gnu-a
注意:在选择交叉编译工具链时,一定要明确目标架构大小端。
二、编译安装gdb
首先通过configure配置gdb编译选项,再进行编译和安装。
(一)、配置gdb编译选项
cd gdb8.3
./configure --target=aarch64-linux-gnu --prefix=/home/hhl/gdbserver
参数说明:
--target 目标架构
--prefix 自定义gdb编译安装路径
(二)、编译gdb
cd gdb8.3
make -j8
参数说明:
--j8 并行编译(8)
(三)、安装gdb
cd gdb8.3
make install
三、交叉编译gdbserver
(一)、配置gdbserver编译选项
由于gdbserver需要移植到目标环境中运行,为了避免环境的影响,因此采取静态编译的方式。
cd gdb8.3/gdb/gdbserver
LDFLAGS="-static" ./configure --target=aarch64-linux-gnu --host=aarch64-linux-gnu --disable-shared --enable-static
参数说明:
LDFLAGS="-static" 静态编译
--target 目标架构
--prefix 自定义gdb编译安装路径
--disable-shared --enable-static 可选参数,静态编译。
(二)、交叉编译gdbserver
使用绝对路径正确配置gcc和g++的路径。
make CC=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ -j8
参数说明:
CC gcc路径
cXX g++路径
交叉编译成功后,gdbserver在gdb8.3/gdb/gdbserver路径下