ARM平臺裸板GDB調試

ARM平臺裸板GDB調試

概述

調試方式

ARM平臺下裸板調試,一般分爲兩種。
* ARM內核的MCU開發和調試
* ARM內核的SOC的bootloader開發和調試

MCU的開發多是基於Windows系統。使用Keil(MDK)、芯片廠商基於eclipse的改造的IDE進行開發。當然也有開發者自己搭建環境進行開發的(gcc+編輯器等方式)。
SOC bootloader調試多是使用Linux系統。使用GCC或者ARMCC進行編譯。

編譯器選擇

arm的編譯有兩種:

編譯器 區別
ARMCC ARM官方,收費,閉源
GCC交叉編譯器 非官方,免費,開源

使用ARMCC編譯器的多是在Keil(IDE)平臺下開發,當然Linux也有(如高通平臺的modem模塊)不過用的少。
gcc免費開源,在Windows和Linux下的使用者都很多。

調試工具

不管哪種方式,在ARM平臺下的裸板開發基本都會使用JTAG接口的仿真器進行在線調試。
不管是Jlink還是STlink等,都是開發者常用的JTAG接口的仿真器。
現在ARM內核的芯片和仿真器基本都支持SWD模式,畢竟只用四個引腳,硬件電路設計方便。

小結

本文將介紹在使用Jlink和GDB在線調試的方式。

Jlink的使用

Jlink安裝

在Jlink官網https://www.segger.com/可以下載到最新Jlink軟件。根據自己的操作系統選擇對應的即可。

Jlink GDB Server是用來實現JLink和GDB程序的通信的server程序。其使用socket的方式來實現和GDB的通信,十分靈活方便。
不僅可以在本地通過localhost:port方式,也可以在局域網內聯網調試。
這極大方便了使用虛擬機的用戶。既可以使用純WIN或者純Linux的開發,也可在雙系統下的調試開發。

以window下的Jlink爲例,運行Jlink GDB Server程序。
jlink_gdb_server.jpg
點擊OK運行
jlink_gdb_server_run.jpg
等GDB連接上紅色就變爲綠色了

GDB的使用

以下內容引用自萌萌噠兔紙醬-CSDN

運行GDB

$ arm-none-eabi-gdb

進入如下界面

GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs
Copyright (C) 2014 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=i686-w64-mingw32 --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)

連接端口

若是本地如下,若是局域網內則填寫ip:port

(gdb)target remote localhost:2331

具體的端口號見Jlink GDB Server上面的提示(如上一個圖中顯示的是“2331”)

進行初始化操作

(gdb)monitor reset
(gdb)monitor halt

這裏monitor意爲這向連接的外部軟件發送指令,此處即向Jlink發送指令,因爲reset halt等指令不是GDB的內部指令

裝載調試程序

(gdb)file <編譯生成的elf文件>
(gdb)load

注意生成elf文件時要加-g選項,不然你只能看到彙編代碼了 T_T

進行調試

網上關於gdb調試的教程已經很多,我這裏再畫蛇添足一下。

命令 縮寫 含 義
l list指令的縮寫 意爲列出當前執行的源代碼。同時輸入指令後重覆按回車等效於再次輸入上次的指令。
c continue的縮寫 在嵌入式GDB中我們不能使用RUN指令來運行代碼,相應的我們需要continue指令來運行。
b break縮寫 用於在程序中打斷點,使用方式有很多種:
b 16 ,在當前低16行代碼出加斷點。
b i=1 ,當i等於1時停止,類似於這種條件式斷點的方式也是GDB獨有的一種強大功能。
b main,在main函數的入口打斷點。
i b info break縮寫 顯示當前設置的斷點信息。如下面這個查到了在main函數處有兩個斷點,序號分別爲1和2。
d break delet break縮寫 刪除所有斷點。 d break 1 刪除序號爲1的斷點
s step縮寫 會進入子函數的單步運行
n next縮寫 即會跳過子函數的單步運行
u until縮寫 使用時後方加行號如: u 16 即運行到第16行
finish 完成並跳出當前的子函數
p print縮寫 使用時後面加變量名稱如:p tmp ,用來顯示變量數值
display 使用時後面加變量名稱如:display tmp ,用於跟蹤變量數值,在每次執行停下時會自動顯示變量數值。
bt 查看堆棧
q/Ctrl+d quit縮寫 使用q即quit指令或快捷鍵Ctrl+d來正常退出GDB

gdb的GUI調試界面

(gdb)-
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章