最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VSCode gdb 調(diào)試 qemu u-boot 的方法詳解

 更新時(shí)間:2023年06月26日 14:34:57   作者:張世爭(zhēng)  
這篇文章主要介紹了VSCode gdb 調(diào)試 qemu u-boot 的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

  • 最近使用 VS Code GDB 調(diào)試 qemu,有了一點(diǎn)收獲,u-boot 編譯后生成了一個(gè) elf 文件:u-boot,是否也可以調(diào)試一下?
  • 為何需要 VS Code GDB 調(diào)試,直接 gdb 調(diào)試不就可以了嗎?答案就是:VS Code 可以界面調(diào)試,命令行調(diào)試會(huì)枯燥很多

環(huán)境

  • 使用 qemu,就是不需要板子
  • win10 64位 VMware Workstation Pro 16
  • ubuntu 20.04
  • qemu (虛擬ARM開(kāi)發(fā)板),qemu arm64 平臺(tái)
  • u-boot : u-boot-2023.04
  • gcc 交叉編譯工具鏈:gcc version 12.2.1 20230401

目標(biāo)

  • 基于 qemu,VS Code GDB,界面調(diào)試 u-boot,了解 u-boot 的啟動(dòng)流程
  • qemu:不需要硬件電路板支持,當(dāng)前一些啟動(dòng)初始化流程可能與實(shí)際電路板存在差異,所以目標(biāo)就是摸清楚 u-boot 的啟動(dòng)流程,重在搞清楚 u-boot 啟動(dòng)與初始化流程。
  • VS Code,這里重在界面調(diào)試,類(lèi)似于 eclipse 那樣的,可以源碼調(diào)試
  • GDB:是一個(gè)強(qiáng)大的調(diào)試工具

編譯 u-boot

  • 配置文件:configs/qemu_arm64_defconfig
  • 生成配置:make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- qemu_arm64_defconfig
  • 【備注】:當(dāng)前 u-boot-2023.04 ARM 與 ARM64 沒(méi)有分開(kāi),所以 ARCH=arm,而不是 ARCH=arm64
  • 開(kāi)始編譯: make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-
  • 生成的產(chǎn)物: u-boot.bin:二進(jìn)制文件, u-boot: elf 可執(zhí)行文件,默認(rèn)包含 debug 信息

配置 VS Code gdb

  • 當(dāng)前 是 Win10 下 VS Code 通過(guò) SSH 連接 VM虛擬機(jī)中的 ubuntu,如果本地是 ubuntu 系統(tǒng),應(yīng)該就不需要 SSH 遠(yuǎn)程連接
  • VS Code 安裝 gdb 調(diào)試插件

在這里插入圖片描述

  • 【備注】gdb 這個(gè)插件,好像不需要,確認(rèn)下左邊欄 是否有個(gè) DEBUG 調(diào)試按鈕吧,好像是 VS Code 自帶的。
  • 配置 VS Code 調(diào)試:點(diǎn)擊 【設(shè)置】的按鈕,會(huì)提示選擇某個(gè)調(diào)試器,這里隨便選擇一個(gè),然后就會(huì)出現(xiàn)一個(gè) .vscode/launch.json 文件
  • 修改 launch.json 文件內(nèi)容如下
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "uboot-debug",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "127.0.0.1:1234",
            "miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",
            "program": "${workspaceFolder}/u-boot",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb",
        }
    ]
}
  • 注意點(diǎn)一:"miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",,這里設(shè)置 gcc gdb 的執(zhí)行路徑,全路徑即可,這里的 gdb,來(lái)自 gcc version 12.2.1 20230401 交叉編譯工具鏈
  • 注意點(diǎn)二:"program": "${workspaceFolder}/u-boot",,這里選擇 u-boot,也就是 ELF 文件,而不是 u-boot.bin 二進(jìn)制文件
  • 注意點(diǎn)三:"stopAtEntry": true,,這里選擇 所有 的 執(zhí)行 入口函數(shù),都有斷點(diǎn)停下來(lái),否則可能 u-boot 無(wú)法調(diào)試

qemu 啟動(dòng)與調(diào)試腳本

qemu 啟動(dòng)腳本:qemu.sh,可以確認(rèn) u-boot 是否可以正常啟動(dòng)

#!/bin/bash
qemu-system-aarch64 -machine virt \
        -nographic \
        -m 512M \
        -cpu cortex-a57 \
        -kernel u-boot \

qemu 調(diào)試調(diào)試腳本,qemu-debug.sh,執(zhí)行此腳本,可以進(jìn)入 qemu 調(diào)試

#!/bin/bash
qemu-system-aarch64 -machine virt \
        -nographic \
        -m 512M \
        -cpu cortex-a57 \
        -kernel u-boot \
        -s -S

調(diào)試方法

  • 執(zhí)行 qemu-debug.sh,此時(shí)會(huì)卡住,也就是 qemu 處于【凍結(jié)】狀態(tài)
  • 點(diǎn)擊 調(diào)試圖標(biāo)的 【運(yùn)行】按鈕:

在這里插入圖片描述

進(jìn)入調(diào)試界面:

在這里插入圖片描述

此時(shí)可以加斷點(diǎn)進(jìn)行調(diào)試,可以單步【F11】或者 【F10】進(jìn)行調(diào)試

在這里插入圖片描述

如此, VS Code gdb 源碼調(diào)試 u-boot 的環(huán)境搭建成功了

備注

  • 好像 u-boot 有一段 重定位的操作,經(jīng)過(guò)重定位后, VS Code gdb 就無(wú)法正常加人斷點(diǎn)了,也就是沒(méi)有了調(diào)試符號(hào)與信息,這部分后續(xù)再梳理一下。
  • 當(dāng)前的 VS Code gdb 界面源碼調(diào)試 u-boot,可以從 reset 開(kāi)始,單步【F11】配合【F10】與 手動(dòng)斷點(diǎn),了解 u-boot 的第一階段的啟動(dòng)流程,感覺(jué)對(duì)熟悉 u-boot 啟動(dòng)流程 還是有點(diǎn)用處。

小結(jié)

  • VS Code GDB 調(diào)試功能,感覺(jué)有點(diǎn)像專(zhuān)業(yè)的 Visual Studio 的感覺(jué)了,嵌入式軟件可以調(diào)試,這本身就是一件好事,利于熟悉代碼執(zhí)行流程、問(wèn)題定位等。
  • 調(diào)試過(guò)程中,有寄存器、局部變量、斷點(diǎn)、【監(jiān)視】watch 等窗口,可以觀察程序執(zhí)行的當(dāng)前狀態(tài),很有用,至少比 gdb【命令行】調(diào)試起來(lái)舒服與高效

到此這篇關(guān)于VSCode gdb 調(diào)試 qemu u-boot 的方法的文章就介紹到這了,更多相關(guān)VSCode gdb 調(diào)試 qemu u-boot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Git子模塊拉取操作的完整指南

    Git子模塊拉取操作的完整指南

    子模塊(Submodule)允許將外部 Git 倉(cāng)庫(kù)嵌入到當(dāng)前項(xiàng)目中,常用于管理第三方庫(kù)、共享代碼模塊等場(chǎng)景,子模塊指向特定提交,保持主倉(cāng)庫(kù)與子模塊的獨(dú)立版本控制,本文給大家介紹了Git子模塊拉取操作的完整指南,需要的朋友可以參考下
    2025-11-11
  • Visual Studio安裝git插件的方法步驟

    Visual Studio安裝git插件的方法步驟

    這篇文章主要介紹了Visual Studio安裝git插件的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Git安裝詳細(xì)圖文教程(Git?安裝過(guò)程的每一個(gè)步驟)

    Git安裝詳細(xì)圖文教程(Git?安裝過(guò)程的每一個(gè)步驟)

    這篇文章主要介紹了Git安裝詳細(xì)圖文教程(Git?安裝過(guò)程的每一個(gè)步驟),本文以Git-2.35.1.2-64-bit.exe為例給大家講解安裝過(guò)程,需要的朋友可以參考下
    2023-02-02
  • Postman配置多環(huán)境請(qǐng)求地址的實(shí)現(xiàn)

    Postman配置多環(huán)境請(qǐng)求地址的實(shí)現(xiàn)

    本文主要介紹了Postman配置多環(huán)境請(qǐng)求地址的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Git原理和常用操作

    Git原理和常用操作

    今天小編就為大家分享一篇關(guān)于Git原理和常用操作的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • git中submodule子模塊的添加、使用和刪除的示例代碼

    git中submodule子模塊的添加、使用和刪除的示例代碼

    這篇文章主要介紹了git中submodule子模塊的添加、使用和刪除的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 解決IDEA GIT記錄無(wú)法查看提交文件的問(wèn)題

    解決IDEA GIT記錄無(wú)法查看提交文件的問(wèn)題

    這篇文章主要介紹了解決IDEA GIT記錄無(wú)法查看提交文件的問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決Git?merge時(shí)報(bào)錯(cuò):refusing?to?merge?unrelated?histories問(wèn)題

    解決Git?merge時(shí)報(bào)錯(cuò):refusing?to?merge?unrelated?histories問(wèn)題

    在使用Git進(jìn)行分支合并時(shí),可能會(huì)遇到"refusing?to?merge?unrelated?histories"錯(cuò)誤,這是因?yàn)閲L試合并的兩個(gè)分支具有不相關(guān)的歷史記錄,解決方法包括使用--allow-unrelated-histories參數(shù)來(lái)合并分支,保留各自歷史,或者直接用一個(gè)分支的內(nèi)容覆蓋另一個(gè)分支
    2024-10-10
  • 淺析git 刪除某次指定的提交問(wèn)題

    淺析git 刪除某次指定的提交問(wèn)題

    這篇文章主要介紹了git 刪除某次指定的提交問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧
    2020-07-07
  • 微信小程序 iPhoneX底部安全區(qū)域(底部小黑條)適配(一分鐘解決)

    微信小程序 iPhoneX底部安全區(qū)域(底部小黑條)適配(一分鐘解決)

    iPhone X 對(duì)于微信小程序的tabbar來(lái)說(shuō),會(huì)被底部小黑條覆蓋,需要處理,大概思路是,得到手機(jī)型號(hào)、分別判斷樣式。這篇文章主要介紹了微信小程序 iPhoneX底部安全區(qū)域(底部小黑條)適配問(wèn)題,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

迁西县| 海盐县| 马龙县| 寻乌县| 南澳县| 罗田县| 盐池县| 闻喜县| 中宁县| 老河口市| 郎溪县| 惠州市| 泾川县| 屯留县| 元谋县| 武城县| 商河县| 彭水| 桃园县| 莒南县| 四平市| 阳西县| 寿宁县| 淮滨县| 霸州市| 绩溪县| 永川市| 昌都县| 河间市| 辽宁省| 义马市| 革吉县| 南投县| 中超| 石河子市| 林芝县| 榕江县| 娱乐| 冀州市| 承德县| 温宿县|