通過GDB調(diào)試代碼的便利性無需贅言。我們直接以調(diào)試meta-hypervisor為示例進行說明。
準備工作
代碼
代碼請參考meta-hypervisor和meta-demos。代碼里邊有詳細的說明文檔。
QEMU
安裝qemu-system-aarch64,版本要求大于5.0。
啟動QEMU
啟動QEMU的命令:
qemu_cmd:=qemu-system-aarch64 run:platform @$(qemu_cmd)-nographic -Mvirt,secure=on,virtualization=on,gic-version=3 -cpucortex-a53-smp4-m4G -bios$(atf-fip) -deviceloader,file="$(meta_image)",addr=0x50000000,force-raw=on -devicevirtio-net-device,netdev=net0 -netdevuser,id=net0,net=192.168.42.0/24,hostfwd=tcp5555-:22 -devicevirtio-serial-device-chardevpty,id=serial3-devicevirtconsole,chardev=serial3 -S-s
-bios $(atf-fip)
atf-fip是指編譯出的ATF和U-boot的二進制文件。
-device loader,file="$(meta_image)",addr=0x50000000,force-raw=on
meta_image指的是meta-hypervisor的二進制代碼。addr=0x50000000指的是加載到物理內(nèi)存0x50000000地址處。
-M virt,secure=on,virtualization=on,gic-version=3
指定需要使用的machine類型,virt是qemu提供的一個通用machine,可以同時支持arm32和arm64(部分cortex不支持),-M help可以列出所有支持的machine列表。
secure=on是支持安全空間。
virtualization=on是支持虛擬化擴展。
gic-version=3是支持GICv3通用中斷控制器類型。
-cpu cortex-a53 -smp 4 -m 4G
-cpu cortex-a53:指定模擬的CPU類型。可以使用-cpu help,查看當前支持的CPU類型。
-m 4G:指定內(nèi)存大小。
-smp 4:指定CPU核的數(shù)量,默認是1。
-s -S:可選,調(diào)試參數(shù)。-S,可以讓qemu加載image到指定位置后停止運行,等待gdb連接;-s, 等價于--gdb tcp::1234,啟動gdb server并默認監(jiān)聽1234端口。
啟動gdb客戶端
再打開一個命令行窗口:
gdb-multiarch--tui./bin/qemu-aarch64-virt/meta.elf
啟動后的界面,如下所示:
連接gdb-server:
(gdb)targetremotelocalhost:1234
在cpu_init函數(shù)打breakpoint。然后,執(zhí)行命令continue。回到gdb-server端,輸入go 0x50000000開始運行程序。
gdb客戶端,執(zhí)行單步執(zhí)行,最后發(fā)現(xiàn)是mem_init_vm_config(config_addr)函數(shù)執(zhí)行出現(xiàn)問題。打印變量print/x config_addr,結(jié)果是1。而我們配置平臺的物理內(nèi)存是從0x40000000處開始的。這樣,等于我們訪問非法物理地址。
用VSCode可視化環(huán)境調(diào)試
vscode中集成了gdb功能,我們可以用它來圖形化的調(diào)試meta-hypervisor。
首先,我們按下ctrl+alt+D,調(diào)出debug窗口,選擇創(chuàng)建launch.json文件,添加vscode的gdb配置文件(.vscode/launch.json):
{ //UseIntelliSensetolearnaboutpossibleattributes. //Hovertoviewdescriptionsofexistingattributes. //Formoreinformation,visit:https://go.microsoft.com/fwlink/?linkid=830387 "version":"0.2.0", "configurations":[ { "name":"(gdb-multiarch)Launch", "type":"cppdbg", "request":"launch", "program":"${workspaceFolder}/wrkdir/srcs/meta/bin/qemu-aarch64-virt/meta.elf", "cwd":"${workspaceFolder}", "MIMode":"gdb", "miDebuggerPath":"/usr/bin/gdb-multiarch", "miDebuggerServerAddress":"localhost:1234" } ] }
這里對幾個重點參數(shù)做一些說明:
program: 調(diào)試的符號文件
miDebuggerPath:gdb的路徑, 這里需要注意的是,由于我們是arm64內(nèi)核,因此需要用gdb-multiarch來進行調(diào)試
miDebuggerServerAddress:對端地址,qemu會默認使用1234這個端口
配置完成之后,可以直接啟動GDB, 連接上meta-hypervisor(gdb-server端的啟動順序參考前面的一段),界面如下所示:
在vscode中,可以設(shè)置斷點,進行單步調(diào)試。可以查看變量、通用寄存器、系統(tǒng)寄存器、浮點寄存器等。還可以查看調(diào)用棧的過程。具體如下紅色方框和文字注釋所示:
審核編輯:湯梓紅
-
ARM
+關(guān)注
關(guān)注
134文章
9180瀏覽量
369427 -
調(diào)試
+關(guān)注
關(guān)注
7文章
589瀏覽量
34080 -
qemu
+關(guān)注
關(guān)注
0文章
57瀏覽量
5411
原文標題:ARM深入理解-hypervisor調(diào)試方法二(QEMU+GDB調(diào)試ARM程序)
文章出處:【微信號:嵌入式ARM和Linux,微信公眾號:嵌入式ARM和Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用GDB調(diào)試Linux應(yīng)用程序
在Linux中如何使用gdb調(diào)試C程序?
如何在Linux中使用gdb調(diào)試C程序
![如何在Linux中使用<b class='flag-5'>gdb</b><b class='flag-5'>調(diào)試</b>C<b class='flag-5'>程序</b>](https://file.elecfans.com/web1/M00/92/50/pIYBAFzdBvmAB-9QAAAlIz3uyXc748.png)
嵌入式Linux的GDB調(diào)試環(huán)境建立
使用 GDB 調(diào)試多進程程序
Linux應(yīng)用的GDB調(diào)試的原理及過程分析
![Linux應(yīng)用的<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>的原理及過程分析](https://file.elecfans.com/web1/M00/B5/54/pIYBAF5gWW-ARv_SAABcEAzxVmk577.png)
ARM平臺如何玩轉(zhuǎn)GDB遠程調(diào)試?
![<b class='flag-5'>ARM</b>平臺如何玩轉(zhuǎn)<b class='flag-5'>GDB</b>遠程<b class='flag-5'>調(diào)試</b>?](https://file.elecfans.com/web2/M00/16/43/poYBAGFSePaALvBiAAA4prW2430321.jpg)
在ubuntu中調(diào)試GDB
![在ubuntu中<b class='flag-5'>調(diào)試</b><b class='flag-5'>GDB</b>](https://file1.elecfans.com/web2/M00/8D/FD/wKgaomTCKxCAGEqwAAAJmUuGa5Q744.jpg)
qemu-riscv在scode的gdb調(diào)試步驟
![<b class='flag-5'>qemu</b>-riscv在scode的<b class='flag-5'>gdb</b><b class='flag-5'>調(diào)試</b>步驟](https://file1.elecfans.com/web2/M00/A6/6D/wKgaomUU6pOAPrSdAABO5Jf49G0198.jpg)
如何使用GDB調(diào)試工具
![如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具](https://file1.elecfans.com/web2/M00/AD/44/wKgaomVMoQ-ALIZ1AAG9PSG5F_o447.jpg)
評論