欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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ā)時,很多時候都會使用到GDB,從底層去理解GDB的調(diào)試過程,將更加容易的理解調(diào)試的過程。

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

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

宿主機(jī),啟動gdb

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

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

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

相應(yīng)GDB的請求

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

讀寫內(nèi)存

讀寫寄存器

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

提供調(diào)試Trap

GDB斷點的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時,采用的是tcp協(xié)議。

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

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是命令的校驗和。

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

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

發(fā)送:

$packet-data#checksum

回復(fù)

+

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

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

下面就是一個實際的通信過程。

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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5096

    文章

    19193

    瀏覽量

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

    關(guān)注

    31

    文章

    5372

    瀏覽量

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

    關(guān)注

    0

    文章

    60

    瀏覽量

    13351
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    94

    瀏覽量

    19996

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    RISC-V 匯編語言程序的調(diào)試

    -kernel sum.elf -s -S 注意一定要帶入-s -S參數(shù)。-s的意思是在QEMU中啟動gdb server,端口號為1234,-S的意思是,完成裝載之后,不要啟動模擬的處理器,等待調(diào)試器接入
    發(fā)表于 07-19 16:27

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

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

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

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

    rtt調(diào)試時出警告

    ] Target successfully examined. Info : starting gdb server for riscv.cpu.0 on 3333 Info : Listening
    發(fā)表于 06-29 19:11

    高速串行通信協(xié)議都有哪些

    高速串行通信協(xié)議是現(xiàn)代電子設(shè)備中用于數(shù)據(jù)傳輸?shù)年P(guān)鍵技術(shù)。這些協(xié)議在各種應(yīng)用中發(fā)揮著重要作用,如計算機(jī)、移動設(shè)備、網(wǎng)絡(luò)設(shè)備等。以下是一些常見的高速串行
    的頭像 發(fā)表于 05-31 16:11 ?1302次閱讀

    使用PSoc 62系列板卡時遇到了無法燒錄和調(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

    使用GDB OpenOCD調(diào)試程序進(jìn)行調(diào)試時,DAP \"CYW20820A1.cpu初始化失敗的原因?

    我使用 Modus 工具箱導(dǎo)入了一個 AUDIO WATCH 示例。 成功構(gòu)建后,當(dāng)我嘗試使用 GDB OpenOCD 調(diào)試程序進(jìn)行調(diào)試時,得到如下錯誤信息: 所有跳線設(shè)置均為默認(rèn)值。 信息:自動
    發(fā)表于 05-21 07:30

    使用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 ?2507次閱讀
    使用VSCode調(diào)試嵌入式程序:如何切換<b class='flag-5'>gdb</b> <b class='flag-5'>server</b>

    stlink gdb server遇到bkpt斷點時,無法跳過怎么處理?

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

    使用STM32Cube Programmer可以連接到芯片,不能擦除是為什么?

    STM32F407ZGT6單片機(jī)報錯信息 STMicroelectronics ST-LINK GDB server. Version 7.3.0Copyright (c) 2023
    發(fā)表于 03-14 08:32

    STM32G473RCT的PC15管腳設(shè)置成GPIO_OUTPUT,程序無法運行,debug也異常怎么解決?

    and parsing file: ST-LINK_GDB_server_a12912.srec File : ST-LINK_GDB_server_a12912.srec Size : 33.23
    發(fā)表于 03-11 06:14

    TDA5235_868_5_BOARD ModusToolbox?3.1在0xe000104c處寫入內(nèi)存失敗的原因?

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

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

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

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

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