arm linux 移植 gdb、gdbserver


背景

調試工具gdb的使用對於嵌入式Linux開發人員來說是一項不可少的技能。
目前,嵌入式 Linux系統中,主要有三種遠程調試方法,分別適用於不同場合的調試工作:用ROM Monitor調試目標機程序、用KGDB調試系統內核和用gdbserver調試用戶空間程序
這三種調試方法的區別主要在於,目標機遠程調試stub 的存在形式的不同,而其設計思路和實現方法則是大致相同的。
我們最常用的是調試應用程序。就是采用gdb+gdbserver的方式進行調試。在很多接在情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程 序。采用GDB方法調試,由於嵌入式系統資源有限性,一般不能直目標系統上進行調試,通常采用gdb+gdbserver的方式進行調試。 Gdbserver在目標系統中運行,gdb則在宿主機上運行。

要進行GDB調試,目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序(目前似乎也可以用ARM的DS-5工具來替換宿主機的GDB,實現可視化調試)。一般linux發行版中都有一個可以運行的gdb,但開發人員 不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平台作一個簡單配置,重新編譯得到相應gdb。

gdb : v7.81

編譯

一個腳本完成所有的事情。

##
#    Copyright By Schips, All Rights Reserved
#    https://gitee.com/schips/

#    File Name:  make.sh
#    Created  :  Tue 24 Dec 2019 04:20:51 PM CST

##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=arm-linux


OUTPUT=${BASE}/install/

make_dirs() {
    cd ${BASE}
    mkdir  compressed  install  source -p
    sudo ls
}

tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1
    fi

    echo "[OK] Downloaded [${filename}] "
}


download_package () {
    cd ${BASE}/compressed
    #下載包
    tget http://ftp.gnu.org/gnu/gdb/gdb-7.8.1.tar.xz
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C  ../source
    done
    rm -rf /tmp/list.txt
}
make_gdb_host () {
    cd ${BASE}/source/gdb*
    ./configure --target=${BUILD_HOST} --prefix=${OUTPUT}/gdb_host
    make && make install

}

make_gdb_target () {
    cd ${BASE}/source/gdb*/gdb/gdbserver
    ./configure --host=${BUILD_HOST} --prefix=${OUTPUT}/gdbserver
    make && make install
}


make_dirs
#download_package
tar_package
# arm gdb 分為2個部分
make_gdb_host
make_gdb_target
exit $?

測試

將編譯生成的 gdbserver 復制到目標板/usr/sbin上,修改執行權限,然后測試一個簡單的helloworld程序:

板子上

gdbserver  <host ip : 端口> <程序名>

例如:
$ gdbserver 192.168.1.100:5000 helloworld                 # 啟動調試,等待主機連接
Process helloworld created; pid = 698
Listening on port 5000

主機

運行以下命令進入gdb調試的界面(以arm-linux-gcc工具鏈為例)

arm-linux-gdb  <程序名>

輸入交互式命令:

(gdb)target remote <target-board-ip:端口> 

此后,使用gdb命令開始調試即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM