女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GDB串行協議概述 GDB Server的作用

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

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

在做嵌入式開發調試時,可理解為兩個部分

嵌入式系統平臺,啟動一個debug stub

宿主機,啟動gdb

兩個平臺之間通過串行數據總線連接起來。

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

所以GDB Server可以是一個openocd,或者JTAG等等實際的外設模塊,和目標板子進行連接后,可以調試芯片。它本質上是一個解析GDB協議的模塊,或者是一段后臺的程序。

相應GDB的請求

當gdb和嵌入式平臺進行通信的時候,會發一系列的請求,例如:

讀寫內存

讀寫寄存器

設置或者清除斷點

提供調試Trap

GDB斷點的Trap

無效指令的Trap

系統錯誤的Trap

同步傳輸CPU的狀態和到遠程的GDB中。

3.一個標準的gdb的調試過程一般的正常使用編譯工具鏈中都會有gdb的工具,就拿riscv的來說,用riscv-nuclei-elf-gdb.exe去連接qemu上的gdb stub時,采用的是tcp協議。

當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

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

4.GDB 遠程串行協議解析一個標準的GDB串行協議的格式如下

$packet-data#checksum

其中的消息是通過ASCII碼進行傳輸,以$開始,以#結束。最后的checksum是命令的校驗和。

上面就是通過Wireshark監聽到的協議數據。

GDB與GDB server進行通信的時候,采用收發形式進行,必然會有下面的通信過程

發送:

$packet-data#checksum

回復

+

每次都需要回復一個+,表示收到數據。

當沒有接受到數據,或者超時時,需要進行重傳操作。

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

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

gdb 和 target之間的通信一直會采用收發對稱的數據格式

比如寫內存

gdb會調用set 0x4015cc = 0xc320。

那么gdb底層的通信是

$M4015CC,2:C320#6d

目標機收到數據后,會首先返回

+

接著返回狀態

$OK#9a

這樣,一個通過gdb操作內存的中的數據的通信協議就完成了。

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

比如單步調試的指令

step:

[gdb] $s#73

向下執行的指令

Continue

[gdb] $c#63

控制臺輸出

Console Output

[target] $o48656c6c6f2c20776f726c64210a#55

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

關于命令的格式可以查看官方文檔

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

但是舉出一些基本的規律

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

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5140

    文章

    19524

    瀏覽量

    314754
  • 寄存器
    +關注

    關注

    31

    文章

    5421

    瀏覽量

    123290
  • gdb
    gdb
    +關注

    關注

    0

    文章

    60

    瀏覽量

    13530
  • DEBUG
    +關注

    關注

    3

    文章

    94

    瀏覽量

    20362

原文標題:GDB串行協議概述

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    使用STM32CubeIDE對STM32H7進行開發和調試,CM4始終報\"Failed to read ROM table via AP 3\"錯誤怎么解決?

    sequence: Failed to start GDB server Failed to start GDB server ST-Link設備進行初始化時出錯。 原因:(255)
    發表于 05-14 06:20

    STM32H7雙核調試,CM7能成功調試但CM4始終報\"Failed to read ROM table via AP 3\"錯誤是怎么回事?

    sequence: Failed to start GDB server Failed to start GDB server ST-Link設備進行初始化時出錯。 原因:(255)
    發表于 04-27 06:40

    i.MX93使用J-Link和SYSRESETREQ的Cortex-M33復位不起作用怎么解決?

    寄存器和內存等。 我的問題是,重置處理器不起作用。寄存器的內容不會改變,因此我假設 reset 被忽略: (gdb) 監視器 regs R0 = 40D000C0,R1 = 2001EFE3,R2
    發表于 04-11 06:25

    STM32CubeIDE無法啟動正常調試是哪里出了問題?

    STM32CubeIDE始終正常使用中,昨日系統升級為 macOS Sequoia 版本,啟動調試出現錯誤提示,重新安裝應用程序及 st-stlink-server 驅動,仍提示同樣錯誤。 目前
    發表于 03-14 16:30

    CubeIDE下載程序時報錯Target no device found,但是ST-LinkUpgrade可以識別到且可以更新固件,為什么?

    STMicroelectronics ST-LINK GDB server. Version 7.8.0 Copyright (c) 2024, STMicroelectronics. All
    發表于 03-14 07:21

    為什么會報錯Could not determine GDB version using command: arm-none-eabi-gdb --version?

    我已經重啟電腦了,沒用; 重裝軟件沒有,沒有; 將ST_link_server卸載重裝也沒有; 將arm-none-eabi-gdb加入windows 11系統環境變量,也沒用; 將軟件的GDB
    發表于 03-12 08:08

    rs232-hs讀取idcode的時候出現0xffffffff的情況,怎么處理?

    Info : starting gdb server for riscv.cpu on 3333 Info : Listening on port 3333 for gdb connections
    發表于 03-07 12:59

    AN-724: ADuC70xx串行下載協議

    電子發燒友網站提供《AN-724: ADuC70xx串行下載協議.pdf》資料免費下載
    發表于 01-14 15:55 ?0次下載
    AN-724: ADuC70xx<b class='flag-5'>串行</b>下載<b class='flag-5'>協議</b>

    ESP32-C3使用命令行GDB調試出現報錯的原因?

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

    RISC-V 匯編語言程序的調試

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

    為什么無法使用esp-gdbstub調試esp8266?

    /live-debugging-with-open-source-tools-programming-for-esp8266-part-4/\" xtensa-lx106-elf-gdb -b 115200 (gdb) 文件輸出/構建
    發表于 07-11 08:24

    是否有可能在支持gdb的第三方集成開發環境中使用DAS配置調試?

    是否有可能在支持 gdb 的第三方集成開發環境中使用 DAS 配置調試?
    發表于 07-02 07:29

    mp157 m4內核開發,不能在線仿真報錯了怎么解決?

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

    rtt調試時出警告

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

    使用ESP32-MINI-U模組無法builtin JTAG調試怎么解決?

    RISC-V core; found 1 harts Info :hart 0: XLEN=32, misa=0x40101104 Info : starting gdb server
    發表于 06-14 07:13