精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QEMU+GDB調(diào)試ARM程序

我快閉嘴 ? 來(lái)源:嵌入式ARM和Linux ? 作者:嵌入式ARM和Linux ? 2022-10-08 09:17 ? 次閱讀

通過(guò)GDB調(diào)試代碼的便利性無(wú)需贅言。我們直接以調(diào)試meta-hypervisor為示例進(jìn)行說(shuō)明。

準(zhǔn)備工作

代碼

代碼請(qǐng)參考meta-hypervisor和meta-demos。代碼里邊有詳細(xì)的說(shuō)明文檔。

QEMU

安裝qemu-system-aarch64,版本要求大于5.0。

啟動(dòng)QEMU

啟動(dòng)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的二進(jìn)制文件。

-device loader,file="$(meta_image)",addr=0x50000000,force-raw=on

meta_image指的是meta-hypervisor的二進(jìn)制代碼。addr=0x50000000指的是加載到物理內(nèi)存0x50000000地址處。

-M virt,secure=on,virtualization=on,gic-version=3

指定需要使用的machine類(lèi)型,virt是qemu提供的一個(gè)通用machine,可以同時(shí)支持arm32和arm64(部分cortex不支持),-M help可以列出所有支持的machine列表。

secure=on是支持安全空間。

virtualization=on是支持虛擬化擴(kuò)展。

gic-version=3是支持GICv3通用中斷控制器類(lèi)型。

-cpu cortex-a53 -smp 4 -m 4G

-cpu cortex-a53:指定模擬的CPU類(lèi)型??梢允褂?cpu help,查看當(dāng)前支持的CPU類(lèi)型。

-m 4G:指定內(nèi)存大小。

-smp 4:指定CPU核的數(shù)量,默認(rèn)是1。

-s -S:可選,調(diào)試參數(shù)。-S,可以讓qemu加載image到指定位置后停止運(yùn)行,等待gdb連接;-s, 等價(jià)于--gdb tcp::1234,啟動(dòng)gdb server并默認(rèn)監(jiān)聽(tīng)1234端口

啟動(dòng)gdb客戶端

再打開(kāi)一個(gè)命令行窗口:

gdb-multiarch--tui./bin/qemu-aarch64-virt/meta.elf

啟動(dòng)后的界面,如下所示:

66e43c96-469d-11ed-96c9-dac502259ad0.png

連接gdb-server:

(gdb)targetremotelocalhost:1234

在cpu_init函數(shù)打breakpoint。然后,執(zhí)行命令continue?;氐絞db-server端,輸入go 0x50000000開(kāi)始運(yùn)行程序。

gdb客戶端,執(zhí)行單步執(zhí)行,最后發(fā)現(xiàn)是mem_init_vm_config(config_addr)函數(shù)執(zhí)行出現(xiàn)問(wèn)題。打印變量print/x config_addr,結(jié)果是1。而我們配置平臺(tái)的物理內(nèi)存是從0x40000000處開(kāi)始的。這樣,等于我們?cè)L問(wèn)非法物理地址。

用VSCode可視化環(huán)境調(diào)試

vscode中集成了gdb功能,我們可以用它來(lái)圖形化的調(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"
}

]
}

這里對(duì)幾個(gè)重點(diǎn)參數(shù)做一些說(shuō)明:

program: 調(diào)試的符號(hào)文件

miDebuggerPath:gdb的路徑, 這里需要注意的是,由于我們是arm64內(nèi)核,因此需要用gdb-multiarch來(lái)進(jìn)行調(diào)試

miDebuggerServerAddress:對(duì)端地址,qemu會(huì)默認(rèn)使用1234這個(gè)端口

配置完成之后,可以直接啟動(dòng)GDB, 連接上meta-hypervisor(gdb-server端的啟動(dòng)順序參考前面的一段),界面如下所示:

6709ce3e-469d-11ed-96c9-dac502259ad0.png

在vscode中,可以設(shè)置斷點(diǎn),進(jìn)行單步調(diào)試??梢圆榭醋兞?、通用寄存器、系統(tǒng)寄存器、浮點(diǎn)寄存器等。還可以查看調(diào)用棧的過(guò)程。具體如下紅色方框和文字注釋所示:

67301486-469d-11ed-96c9-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9045

    瀏覽量

    366799
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    572

    瀏覽量

    33897
  • qemu
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    5331

原文標(biāo)題:ARM深入理解-hypervisor調(diào)試方法二(QEMU+GDB調(diào)試ARM程序)

文章出處:【微信號(hào):嵌入式ARM和Linux,微信公眾號(hào):嵌入式ARM和Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    pyocd調(diào)試ARM芯片,Ubuntu 安裝arm-none-eabi-gdb

    介紹如果在安裝arm-none-eabi-gdb,在vscode下面對(duì)arm的單片機(jī)進(jìn)行調(diào)試
    的頭像 發(fā)表于 06-07 09:00 ?2.9w次閱讀
    pyocd<b class='flag-5'>調(diào)試</b><b class='flag-5'>ARM</b>芯片,Ubuntu 安裝<b class='flag-5'>arm-none-eabi-gdb</b>

    使用GDB調(diào)試Linux應(yīng)用程序

    本篇講解使用GDB調(diào)試Linux應(yīng)用程序,以下以 `hellowld.c` 為例介紹 GDB調(diào)試入門(mén)。
    發(fā)表于 06-27 15:48 ?449次閱讀

    RK3568-GDB程序調(diào)試方法說(shuō)明

    RK3568-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-19 16:16 ?1729次閱讀
    RK3568-<b class='flag-5'>GDB</b><b class='flag-5'>程序</b><b class='flag-5'>調(diào)試</b>方法說(shuō)明

    TLT507-GDB程序調(diào)試方法說(shuō)明

    TLT507-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-26 10:11 ?934次閱讀
    TLT507-<b class='flag-5'>GDB</b><b class='flag-5'>程序</b><b class='flag-5'>調(diào)試</b>方法說(shuō)明

    在Linux中如何使用gdb調(diào)試C程序?

    通俗的講,GDB 可以讓你看到程序在執(zhí)行過(guò)程時(shí)的內(nèi)部流程,并幫你明確問(wèn)題的所在。我們將在下一節(jié)通過(guò)一個(gè)有效的示例來(lái)討論 GDB 調(diào)試器的用法,但在此之前,我們先來(lái)探討一些之后對(duì)你有幫助
    發(fā)表于 04-28 15:37 ?1668次閱讀

    如何在Linux中使用gdb調(diào)試C程序

    如果你是 C/C++ 程序員,或者使用 Fortran 和 Modula-2 編程語(yǔ)言開(kāi)發(fā)軟件,那么你將會(huì)很樂(lè)意知道有這么一款優(yōu)秀的調(diào)試器 - GDB - 可以幫你更輕松地調(diào)試代碼 b
    發(fā)表于 05-16 14:45 ?780次閱讀
    如何在Linux中使用<b class='flag-5'>gdb</b><b class='flag-5'>調(diào)試</b>C<b class='flag-5'>程序</b>

    嵌入式Linux的GDB調(diào)試環(huán)境建立

    嵌入式Linux的GDB調(diào)試環(huán)境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。這樣,應(yīng)用程序
    發(fā)表于 04-02 14:33 ?508次閱讀

    使用 GDB 調(diào)試多進(jìn)程程序

    是 Proc1 的子進(jìn)程,Proc3 又是 Proc2 的子進(jìn)程。如何使用 GDB 調(diào)試 proc2 或者 proc3 呢?實(shí)際上,GDB 沒(méi)有對(duì)多進(jìn)程程序
    發(fā)表于 04-02 14:33 ?534次閱讀

    Linux應(yīng)用的GDB調(diào)試的原理及過(guò)程分析

    GDB調(diào)試是應(yīng)用程序在開(kāi)發(fā)板上運(yùn)行,然后在PC機(jī)上對(duì)開(kāi)發(fā)板上得應(yīng)用程序進(jìn)行調(diào)試,PC機(jī)運(yùn)行GDB
    發(fā)表于 03-05 09:44 ?3387次閱讀
    Linux應(yīng)用的<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>的原理及過(guò)程分析

    ARM平臺(tái)如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?

    前言關(guān)于GDB工具GDB工具是GNU項(xiàng)目調(diào)試器,基于命令行使用。和其他的調(diào)試器一樣,可使用GDB工具單步運(yùn)行
    的頭像 發(fā)表于 09-28 18:17 ?950次閱讀
    <b class='flag-5'>ARM</b>平臺(tái)如何玩轉(zhuǎn)<b class='flag-5'>GDB</b>遠(yuǎn)程<b class='flag-5'>調(diào)試</b>?

    在ubuntu中調(diào)試GDB

    的 gcc 編譯器即可,注意需要加 -g 選項(xiàng),才能使用 gdb 調(diào)試 arm-linux-gnueabihf-gcc gdbtest .c -o gdbtest -g //編譯測(cè)試程序
    的頭像 發(fā)表于 07-27 16:31 ?1025次閱讀
    在ubuntu中<b class='flag-5'>調(diào)試</b><b class='flag-5'>GDB</b>

    qemu-riscv在scode的gdb調(diào)試步驟

    qemu支持gdb調(diào)試,只需要在命令中添加 -s -S兩個(gè)參數(shù)即可,在bsp/qemu-riscv下已經(jīng)有了qemu-dbg.sh,且加入了
    的頭像 發(fā)表于 09-28 10:54 ?1447次閱讀
    <b class='flag-5'>qemu</b>-riscv在scode的<b class='flag-5'>gdb</b><b class='flag-5'>調(diào)試</b>步驟

    GDB調(diào)試工具的原理

    一、GDB調(diào)試工具的原理 1.1 未執(zhí)行進(jìn)程調(diào)試 啟用gdb調(diào)試運(yùn)行gdb ./test的時(shí)候,
    的頭像 發(fā)表于 11-09 17:04 ?886次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具的原理

    如何使用GDB調(diào)試工具

    在對(duì)應(yīng)程序目錄中使用下面的命令 gdb test 2、調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序進(jìn)程 調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序
    的頭像 發(fā)表于 11-09 17:17 ?786次閱讀
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具

    如何使用linux下gdb來(lái)調(diào)試python程序

    如何使用linux下gdb來(lái)調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來(lái)調(diào)試
    的頭像 發(fā)表于 01-31 10:41 ?2421次閱讀