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路徑下