在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GDB串行協(xié)議概述 GDB Server的作用

嵌入式小作坊 ? 來源:51cto博客 ? 作者:趙夢茹2012 ? 2021-08-10 10:10 ? 次閱讀

1.概述做嵌入式開發(fā)時(shí),很多時(shí)候都會使用到GDB,從底層去理解GDB的調(diào)試過程,將更加容易的理解調(diào)試的過程。

在做嵌入式開發(fā)調(diào)試時(shí),可理解為兩個部分

嵌入式系統(tǒng)平臺,啟動一個debug stub

宿主機(jī),啟動gdb

兩個平臺之間通過串行數(shù)據(jù)總線連接起來。

2.GDB Server的作用當(dāng)PC機(jī)啟動GDB時(shí),需要和GDB Server建立一定的通信連接,由GDB Server解析具體的邏輯并執(zhí)行。

所以GDB Server可以是一個openocd,或者JTAG等等實(shí)際的外設(shè)模塊,和目標(biāo)板子進(jìn)行連接后,可以調(diào)試芯片。它本質(zhì)上是一個解析GDB協(xié)議的模塊,或者是一段后臺的程序。

相應(yīng)GDB的請求

當(dāng)gdb和嵌入式平臺進(jìn)行通信的時(shí)候,會發(fā)一系列的請求,例如:

讀寫內(nèi)存

讀寫寄存器

設(shè)置或者清除斷點(diǎn)

提供調(diào)試Trap

GDB斷點(diǎn)的Trap

無效指令的Trap

系統(tǒng)錯誤的Trap

同步傳輸CPU的狀態(tài)和到遠(yuǎn)程的GDB中。

3.一個標(biāo)準(zhǔn)的gdb的調(diào)試過程一般的正常使用編譯工具鏈中都會有g(shù)db的工具,就拿riscv的來說,用riscv-nuclei-elf-gdb.exe去連接qemu上的gdb stub時(shí),采用的是tcp協(xié)議。

當(dāng)qemu去啟動gdb server的時(shí)候。

qemu-system-riscv32.exe -M gd32vf103v_rvstar -cpu -nographic -s -S

后面的-s表示啟動gdb server。而-S則表示綁定在TCP端口的1234端口號上。

995199c4-f86c-11eb-9bcf-12bb97331649.png

從操作上是這個流程,那么底層的數(shù)據(jù)傳送又是怎樣的流程呢?

4.GDB 遠(yuǎn)程串行協(xié)議解析一個標(biāo)準(zhǔn)的GDB串行協(xié)議的格式如下

$packet-data#checksum

其中的消息是通過ASCII碼進(jìn)行傳輸,以$開始,以#結(jié)束。最后的checksum是命令的校驗(yàn)和。

上面就是通過Wireshark監(jiān)聽到的協(xié)議數(shù)據(jù)。

GDB與GDB server進(jìn)行通信的時(shí)候,采用收發(fā)形式進(jìn)行,必然會有下面的通信過程

發(fā)送:

$packet-data#checksum

回復(fù)

+

每次都需要回復(fù)一個+,表示收到數(shù)據(jù)。

當(dāng)沒有接受到數(shù)據(jù),或者超時(shí)時(shí),需要進(jìn)行重傳操作。

下面就是一個實(shí)際的通信過程。

9a068f0a-f86c-11eb-9bcf-12bb97331649.png

gdb 和 target之間的通信一直會采用收發(fā)對稱的數(shù)據(jù)格式

比如寫內(nèi)存

gdb會調(diào)用set 0x4015cc = 0xc320。

那么gdb底層的通信是

$M4015CC,2:C320#6d

目標(biāo)機(jī)收到數(shù)據(jù)后,會首先返回

+

接著返回狀態(tài)

$OK#9a

這樣,一個通過gdb操作內(nèi)存的中的數(shù)據(jù)的通信協(xié)議就完成了。

由于GDB的指令非常多,這里就不列舉了,但是基本的原理和格式都差別不大。

比如單步調(diào)試的指令

step:

[gdb] $s#73

向下執(zhí)行的指令

Continue

[gdb] $c#63

控制臺輸出

Console Output

[target] $o48656c6c6f2c20776f726c64210a#55

這樣可以在gdb控制臺上輸出hello,world!的命令。

關(guān)于命令的格式可以查看官方文檔

https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html

但是舉出一些基本的規(guī)律

5.小結(jié)用采用GDB進(jìn)行調(diào)試的過程,底層的傳輸原理,采用的是非常簡單的字符串的格式,這GDB將這些命令發(fā)給硬件調(diào)試器或者板子,通過將這些命令解析后,執(zhí)行具體的邏輯,就可以正常的控制芯片中程序的行為了。這就是GDB的串行協(xié)議原理。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19126

    瀏覽量

    305201
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120368
  • gdb
    gdb
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    13303
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    94

    瀏覽量

    19920

原文標(biāo)題:GDB串行協(xié)議概述

文章出處:【微信號:gh_390c588e521e,微信公眾號:嵌入式小作坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    ESP32-C3使用命令行GDB調(diào)試出現(xiàn)報(bào)錯的原因?

    使用 continue 全速運(yùn)行,程序停在斷點(diǎn)位置 此時(shí) GDB 不會打印當(dāng)前行號以及本行代碼,而是出現(xiàn)出現(xiàn)以下情況 (gdb) cContinuing.Thread 2 \"main\"
    發(fā)表于 08-01 07:47

    是否有可能在支持gdb的第三方集成開發(fā)環(huán)境中使用DAS配置調(diào)試?

    是否有可能在支持 gdb 的第三方集成開發(fā)環(huán)境中使用 DAS 配置調(diào)試?
    發(fā)表于 07-02 07:29

    mp157 m4內(nèi)核開發(fā),不能在線仿真報(bào)錯了怎么解決?

    Info : starting gdb server for STM32MP157DACx.cpu0 on 3334 Info : Listening on port 3334 for gdb
    發(fā)表于 07-02 07:28

    使用PSoc 62系列板卡時(shí)遇到了無法燒錄和調(diào)試的問題如何解決?

    : starting gdb server for psoc6.cpu.cm0 on 3332 Info : Listening on port 3332 for gdb connections Info
    發(fā)表于 05-29 06:06

    使用VSCode調(diào)試嵌入式程序:如何切換gdb server

    上文小編給大家介紹了一下如何使用VSCode結(jié)合cortex-debug插件進(jìn)行調(diào)試的方法。本篇就趁熱打鐵,進(jìn)一步深入了解一下如何切換gdb server。讓我們可以不僅僅使用JLinkGDBServer進(jìn)行調(diào)試。
    的頭像 發(fā)表于 05-09 11:02 ?2175次閱讀
    使用VSCode調(diào)試嵌入式程序:如何切換<b class='flag-5'>gdb</b> <b class='flag-5'>server</b>

    stlink gdb server遇到bkpt斷點(diǎn)時(shí),無法跳過怎么處理?

    stlink gdb server 遇到 bkpt 斷點(diǎn)時(shí),無法跳過
    發(fā)表于 03-26 06:43

    EZ USB Suite支持的Jlink GDB Server版本有沒有要求?

    我想問一下,這個EZ USB Suite支持的Jlink GDB Server的版本有沒有要求? 我在segger官方找的jlink版本暫時(shí)只要V644a和V644b 這個問題該如何解決?
    發(fā)表于 02-29 07:44

    為什么VSCODE使用GDB調(diào)試不顯示寄存器?

    VSCODE使用GDB調(diào)試不顯示寄存器
    發(fā)表于 02-22 06:46

    arm三個寄存器在gdb調(diào)試時(shí)的作用

    arm三個寄存器在gdb調(diào)試時(shí)作用? ARM是一種廣泛使用的微處理器架構(gòu),它廣泛應(yīng)用于移動設(shè)備、嵌入式系統(tǒng)和其他高性能計(jì)算設(shè)備。當(dāng)我們在使用gdb(GNU調(diào)試器)調(diào)試ARM程序時(shí),了解和理解三個重要
    的頭像 發(fā)表于 01-31 10:44 ?992次閱讀

    如何使用linux下gdb來調(diào)試python程序

    如何使用linux下gdb來調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來調(diào)試Python程序。GDB是一個強(qiáng)大的調(diào)試工具,可以幫助開發(fā)者診斷和修復(fù)程序中的錯誤。在本文
    的頭像 發(fā)表于 01-31 10:41 ?2624次閱讀

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦?

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦? 在Linux上使用GDB調(diào)試時(shí),遇到函數(shù)調(diào)用是一個常見的情況。函數(shù)調(diào)用可能涉及到多個函數(shù)、多個文件,這就需要我們仔細(xì)審查代碼,理解函數(shù)之間的關(guān)系和參數(shù)傳遞
    的頭像 發(fā)表于 01-31 10:33 ?717次閱讀

    簡述GDB調(diào)試器提供的基本功能

    GDB是一個功能強(qiáng)大的源代碼級調(diào)試工具,它提供了多種基本功能,幫助程序員** **更好地理解程序的運(yùn)行機(jī)制和定位問題** **。
    的頭像 發(fā)表于 01-28 17:44 ?1311次閱讀

    TLT507-GDB程序調(diào)試方法說明

    TLT507-GDB程序調(diào)試方法說明
    的頭像 發(fā)表于 01-26 10:11 ?986次閱讀
    TLT507-<b class='flag-5'>GDB</b>程序調(diào)試方法說明

    通過XMC Link使用XMC4200進(jìn)行調(diào)試,為什么總是得到 “無法確定GDB版本”的提示?

    我正在嘗試通過 XMC Link 使用 XMC4200 進(jìn)行調(diào)試。 但是發(fā)送后我總是得到 “&quot;無法確定 GDB 版本”:&quot;如下所示。 我根據(jù)論壇
    發(fā)表于 01-23 06:02

    RK3568-GDB程序調(diào)試方法說明

    RK3568-GDB程序調(diào)試方法說明
    的頭像 發(fā)表于 01-19 16:16 ?1849次閱讀
    RK3568-<b class='flag-5'>GDB</b>程序調(diào)試方法說明
    主站蜘蛛池模板: a色网站| 男人的网址| 国产1024一区二区你懂的| 日本欧美一区二区三区不卡视频| 四虎精品成人免费观看| 韩国三级观影久久| 黄网在线观看免费| 综合色亚洲| 日本janpanese护士bus中国| 在线视频你懂得| 激情五月婷婷色| 国产亚洲精品久久久久久牛牛| www.狠狠干| 天堂网色| www.欧美色图| h在线国产| 欧美一级视频高清片| 天天在线免费视频| 美女扒开尿口给男人爽的视频 | 国产精品伦视频观看免费| 狠狠的操| 性欧美久久| 在线aa| 日本不卡视频在线视频观看| 噜噜噜久久久| 高清成年美女xx免费网站黄| 天堂资源吧| 午夜撸| 中文字幕11页| 成年看片免费高清观看| 中文字幕一区二区三区永久| 欧美色欧美亚洲高清在线观看| vr亚洲成年网址在线观看| 黑人xxxx精品| 你懂的在线视频观看| 久久成人福利视频| 四虎永久地址4hu紧急入口| 停停五月天| 亚洲国产精品婷婷久久| 一级片视频在线观看| 欧美日韩一卡2卡三卡4卡新区 |