VSCode gdb 調(diào)試 qemu u-boot 的方法詳解
前言
- 最近使用 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開發(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)試,類似于 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 沒有分開,所以ARCH=arm
,而不是ARCH=arm64
- 開始編譯:
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)了,也就是沒有了調(diào)試符號(hào)與信息,這部分后續(xù)再梳理一下。
- 當(dāng)前的 VS Code gdb 界面源碼調(diào)試 u-boot,可以從
reset
開始,單步【F11】配合【F10】與 手動(dòng)斷點(diǎn),了解 u-boot 的第一階段的啟動(dòng)流程,感覺對(duì)熟悉 u-boot 啟動(dòng)流程 還是有點(diǎn)用處。
小結(jié)
- VS Code GDB 調(diào)試功能,感覺有點(diǎn)像專業(yè)的 Visual Studio 的感覺了,嵌入式軟件可以調(diào)試,這本身就是一件好事,利于熟悉代碼執(zhí)行流程、問題定位等。
- 調(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?merge時(shí)報(bào)錯(cuò):refusing?to?merge?unrelated?histories問題
在使用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詳解使用Postman模擬瀏覽器的HTTP請(qǐng)求并獲取返回?cái)?shù)據(jù)
這篇文章主要為大家介紹了在瀏覽器中,獲取網(wǎng)頁(yè)中的某一個(gè)請(qǐng)求信息,并將其導(dǎo)入到Postman軟件,并進(jìn)行API請(qǐng)求測(cè)試的方法,需要的可以參考下2024-03-03