1. 程式人生 > >簡單幾步搭建ARM gdb的除錯環境

簡單幾步搭建ARM gdb的除錯環境

1.下載gdb原始碼

http://ftp.gnu.org/gnu/gdb/
下載稍微早點的版本,因為最新的版本在配置時可能需要版本更高的執行環境,可能會有一堆麻煩,所以建議下載舊點的版本號,我下載 gdb-7.8.1.tar.gz 我的PC環境是虛擬機器Ubuntu 16.04

2.編譯 arm-linux-gdb

在PC上用gdb除錯一個a.out程式時,直接 gcc main.c -g 就可以編譯出含有gdb除錯資訊的可執行檔案 a.out
然後在除錯的時候就用 gdb a.out 就可以進入gdb除錯環境中

所以在使用交叉gdb時需要用交叉編譯鏈編譯出arm開發板上的執行檔案,在PC機上執行能開啟arm可執行檔案的gdb工具,這就是 arm-linux-gdb
解壓gdb原始碼編譯gdb的工具:

tar xvf gdb-7.8.1.tar.gz
mkdir arm-gdb
./configure --target=arm-cortex_a9-linux-gnueabi  --prefix=/home/xxx/tools/gdb-7.8.1/arm-gdb/
make -j4
make install -j4

其中用到的幾個引數如下:

--target 指定目標機交叉編譯器字首,比如--target=arm-cortex_a9-linux-gnueabi ,交叉編譯鏈
--host   指定編譯後的執行主機,預設就是 x86_64-linux,如果要執行在PC上就不指定,他會選擇系統的編譯工具,如果是執行在arm上就用交叉編譯鏈
--prefix 指定要安裝的目錄

如果遇到下邊的錯誤,應該是Ubuntu 沒有安裝txtinfo

WARNING: ‘makeinfo’ is missing on your system.

安裝 txtinfo

sudo apt-get install texinfo

然後重新configure make 和make install

新增環境變數

vi ~./brashrc 
export PATH=$PATH:/home/xxx/tools/gdb-7.8.1/arm-gdb/bin

執行如下就說明安裝成功

arm-cortex_a9-linux-gnueabi-gdb -v
GNU gdb (crosstool-NG linaro-1.13.1-4.8-2013.11 - nexell) 7.6.2 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-build_unknown-linux-gnu --target=arm-cortex_a9-linux-gnueabi". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>.

3.編譯gdbserver

cd gdb/gdbserver
./configure  --target=arm-cortex_a9-linux-gnueabi --host=arm-cortex_a9-linux-gnueabi
make CC=arm-cortex_a9-linux-gnueabi -j4

就會在當前路徑下生成 gdbserver,然後將gdbserver拷貝到arm開發板的/usr/bin/下

4.使用

得到上邊兩個必須的工具後,就看怎麼使用

因為交叉編譯的gdb基於網路通訊來完成gdb除錯,所以就需要分別在ARm端和PC端執行各自的工具來保持通訊

首先在PC端編譯出ARM端使用的可執行二進位制檔案
arm-cortex_a9-linux-gnueabi-gcc main.c -g
然後把 a.out拷貝到ARM端

在ARM端執行:

# gdbserver 192.168.9.101:1234 a.out //ARM的IP地址:自定義的一個埠

在PC端執行:

arm-cortex_a9-linux-gnueabi-gdb a.out

在PC端的gdb中連線ARM的gdbserver

(gdb) target remote 192.168.9.101:1234 

你會看到ARM端出現

Remote debugging from host 192.168.9.68

這就說明gdb連線已經建立現在就可以使用gdb除錯了