精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久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)不再提示

hypervisor的調(diào)試分析方法

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

我們?cè)诰帉?xiě)裸機(jī)程序(baremetal)、虛擬化管理程序(hypervisor)和操作系統(tǒng)(OS)時(shí),Debug分析程序是必不可少的。不像linux內(nèi)核,有大量的調(diào)試方法,很多裸機(jī)程序、hypervisor沒(méi)有完善的調(diào)試分析方法。

異常相關(guān)寄存器

但也不是無(wú)計(jì)可施,在硬件上,ARM架構(gòu)為程序的異常行為提供了詳細(xì)的寄存器:

ESR_ELx寄存器(x=1,2,3)

保存發(fā)生異常時(shí)的特征,比如異常分類(lèi)(ESR_ELx.EC)、異常具體原因(ESR_ELx.ISS)等。

ELR_ELx寄存器(x=1,2,3)

保存發(fā)生異常時(shí),保存要返回的地址,一般情況下就是發(fā)生異常時(shí)的指令地址。

FAR_ELx寄存器(x=1,2,3)

保存錯(cuò)誤地址。

HPFAR_EL2寄存器

保存stage-2階段的地址轉(zhuǎn)換發(fā)生的錯(cuò)誤IPA地址。

ARM從硬件架構(gòu)上設(shè)計(jì)了4層異常級(jí):EL0、EL1、EL2和EL3。不同特權(quán)等級(jí)的程序,運(yùn)行在不同的異常級(jí)上。本文從hypervisor虛擬機(jī)管理程序的角度,講解如何利用這些寄存器,對(duì)程序的異常情況進(jìn)行分析。

hypervisor本身的abort異常

我們以meta-hypervisor出現(xiàn)的具體異常為例:

esr_el2=0x97010046
elr_el2=0xfd8000005880
far_el2=0xfd8000005880

在這兒,esr_el2的值為0x97010046,對(duì)應(yīng)的位域?yàn)椋?/p>

EC IL ISS
100101 1 1_0000_0001_0000_0000_0100_0110

EC = 100101:

說(shuō)明是數(shù)據(jù)abort異常,但是沒(méi)有發(fā)生異常級(jí)改變(EL2);或者,當(dāng)支持嵌套虛擬化時(shí)與VNCR_EL2相關(guān)的訪問(wèn)產(chǎn)生的數(shù)據(jù)abort異常。

ISS編碼(數(shù)據(jù)abort異常的具體原因)

ISV SAS SSE SRT SF AR VNCR LST FnV EA CM S1PTW WnR DFSC
24 23-22 21 20-16 15 14 13 12-11 10 9 8 7 6 5-0
1 00 0 00001 0 0 0 00 0 0 0 0 1 000110

通過(guò)上面各個(gè)位域的信息,綜合得出:把W1寄存器中一個(gè)字節(jié)的數(shù)據(jù)寫(xiě)入內(nèi)存時(shí)發(fā)生的錯(cuò)誤。

我們?cè)賮?lái)看匯編代碼中,0xfd8000005880地址處的內(nèi)容:

void *memset(void *dest, uint32_t c, uint32_t count)
{
    // ......省略
        *d = c;
    fd8000005874:   b94007e0    ldr w0, [sp, #4]
    fd8000005878:   12001c01    and w1, w0, #0xff
    fd800000587c:   f9400fe0    ldr x0, [sp, #24]
    fd8000005880:   39000001    strb    w1, [x0]
        d++;
    fd8000005884:   f9400fe0    ldr x0, [sp, #24]
    fd8000005888:   91000400    add x0, x0, #0x1
    fd800000588c:   f9000fe0    str x0, [sp, #24]
}

代碼中,fd8000005880: 39000001 strb w1, [x0]確實(shí)是往x0寄存器中的地址寫(xiě)入一個(gè)字節(jié)。這正好與我們對(duì)異常原因分析的結(jié)果相同。說(shuō)明異常正是memset函數(shù)發(fā)生的錯(cuò)誤。

ISV: 1, 說(shuō)明23-14位保存著合法指令的異常信息

SAS: 00, 說(shuō)明訪問(wèn)字節(jié)數(shù)據(jù)時(shí)產(chǎn)生的錯(cuò)誤

SSE: 0, 字節(jié)訪問(wèn)不要求符號(hào)擴(kuò)展

SRT: 00001,錯(cuò)誤指令的Wt/Xt/Rt操作數(shù)的寄存器編號(hào)

SF: 0, 指令訪問(wèn)的是32位通用寄存器

AR: 0, 指令沒(méi)有aquire/release語(yǔ)義

VNCR:0, 保留

LST: 00, 產(chǎn)生abort異常的指令未指定

FnV: 0, FAR寄存器是合法的

EA: 0, 表示不是外部abort

CM: 0, 表示錯(cuò)誤不是由cache維護(hù)指令產(chǎn)生的

S1PTW: 0, 表示不是stage-2錯(cuò)誤

WnR: 0, 表示寫(xiě)內(nèi)存

DFSC:000110,L2地址翻譯錯(cuò)誤

如果memset函數(shù)只有一處調(diào)用的話,Bug原因結(jié)合代碼就很容易分析出來(lái)了。但是,我們自己編寫(xiě)的hypervisor中有很多處調(diào)用memset函數(shù)的地方。所以,就文中的bug示例而言,目前還不能分析出原因。所以,我們需要使用qemu模擬器,通過(guò)gdb進(jìn)行單步調(diào)試,看看出問(wèn)題的代碼位置(參見(jiàn)下一篇《QEMU+GDB調(diào)試ARM程序》)。

Guest OS的abort異常

我們?cè)O(shè)計(jì)的hypervisor支持Guest OS觸發(fā)的4類(lèi)異常,具體定義如下:

abort_handler_tabort_handlers[64]=
{
[ESR_EC_DALEL]=aborts_data_lower,
[ESR_EC_SMC64]=smc64_handler,
[ESR_EC_SYSRG]=sysreg_handler,
[ESR_EC_HVC64]=hvc64_handler
};

ESR_EC_HVC64 = 0x16:用于處理Guest OS發(fā)起的HVC調(diào)用,我們?cè)O(shè)計(jì)使用HVC指令在VM之間建立通信

ESR_EC_SMC64 = 0x17:用于處理Guest OS發(fā)起的SMC調(diào)用,我們知道ARM規(guī)定了PSCI規(guī)范,通過(guò)將電源管理等代碼在ATF代碼中實(shí)現(xiàn),這樣就實(shí)現(xiàn)了資源的安全管理。PSCI規(guī)范的底層就是通過(guò)SMC指令實(shí)現(xiàn)的。hypervisor需要將Guest OS發(fā)起的虛擬核的PSCI調(diào)用轉(zhuǎn)發(fā)給物理核。

ESR_EC_SYSRG = 0x18:模擬寄存器和外設(shè)。因?yàn)镚uest OS需要訪問(wèn)一些特殊寄存器和外設(shè),而外設(shè)有時(shí)候需要多個(gè)VM共享,hypervisor對(duì)其進(jìn)行模擬。

ESR_EC_DALEL = 0x24:用于處理Guest OS發(fā)生的abort異常。比如,Guest OS訪問(wèn)我們未指定的物理內(nèi)存。

對(duì)于ESR_EL2寄存器的分析,與前面的一段一樣,不在具體詳述。

而HPFAR_EL2寄存器保存著出錯(cuò)的IPA地址,通過(guò)該地址,我們就可以知道,Guest OS訪問(wèn)哪塊內(nèi)存出錯(cuò),就能解決某些bug了。

審核編輯:湯梓紅

聲明:本文內(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

    瀏覽量

    366806
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5317

    瀏覽量

    120002
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11225

    瀏覽量

    208915

原文標(biāo)題:ARM深入理解-hypervisor調(diào)試方法一(異常寄存器分析)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    通過(guò)GDB調(diào)試代碼的便利性無(wú)需贅言。我們直接以調(diào)試meta-hypervisor為示例進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 10-08 09:17 ?2841次閱讀

    電源管理入門(mén):Hypervisor中的電源管理

    很多時(shí)候聽(tīng)說(shuō)Hypervisor,但是對(duì)底層軟件技術(shù)不了解的人感覺(jué)挺神秘。本篇文章簡(jiǎn)單介紹下Hypervisor的基本概念,另外介紹下電源管理在Hypervisor之上多OS間怎么應(yīng)用。
    的頭像 發(fā)表于 12-06 09:27 ?1359次閱讀
    電源管理入門(mén):<b class='flag-5'>Hypervisor</b>中的電源管理

    學(xué)習(xí)hypervisor嵌入式產(chǎn)品安全設(shè)計(jì)

    第一部分(第1~2章)介紹Hypervisor基礎(chǔ),涵蓋虛擬化技術(shù)與實(shí)現(xiàn)、主流的嵌入式Hypervisor產(chǎn)品,以及基于分離內(nèi)核的嵌入式Hypervisor等內(nèi)容。第二部分(第3~12章)介紹嵌入式
    發(fā)表于 08-25 09:11

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+第一二章讀后感

    非常感謝社區(qū)提供的閱讀機(jī)會(huì),拿到書(shū)后,就迫不及待的的開(kāi)始閱讀了。 社區(qū)還有簽名留念呢,值得紀(jì)念。 《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》的第一、二章為讀者提供了關(guān)于Hypervisor技術(shù)
    發(fā)表于 10-09 18:22

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+第三四章閱讀報(bào)告

    保證系統(tǒng)實(shí)時(shí)性的同時(shí),提供強(qiáng)大的虛擬化支持。 功能特性 :深入分析了PRTOS Hypervisor的功能特性,如虛擬機(jī)管理、資源調(diào)度、安全隔離等。這些特性使得PRTOS Hypervisor能夠滿足
    發(fā)表于 10-09 18:29

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+全文學(xué)習(xí)心得

    景和需求,選擇合適的特性和策略,以實(shí)現(xiàn)最佳的系統(tǒng)性能和資源利用率。 三、實(shí)際應(yīng)用與案例分析 在書(shū)籍的后半部分,我深入學(xué)習(xí)了嵌入式Hypervisor在各個(gè)領(lǐng)域中的實(shí)際應(yīng)用和案例分析。這些領(lǐng)域包括物聯(lián)網(wǎng)
    發(fā)表于 10-09 19:11

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+ 了解Hypervisor

    正值舉國(guó)歡度國(guó)慶佳節(jié)之際,我收到了《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》一書(shū),在此感謝電子發(fā)燒友論壇!當(dāng)初申請(qǐng)?jiān)u測(cè)此書(shū)之時(shí),我根本就不知道這個(gè)Hypervisor是什么,只是看到有嵌入式
    發(fā)表于 10-13 16:47

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+ Hypervisor應(yīng)用場(chǎng)景調(diào)研

    繼續(xù)研讀《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》,想搞清楚Hypervisor的具體應(yīng)用場(chǎng)景,是否能用于我們的嵌入式產(chǎn)品設(shè)計(jì)。 通過(guò)閱讀“Hypervisor類(lèi)型和產(chǎn)品”一節(jié),知道了
    發(fā)表于 10-14 11:21

    解密ACRN:一個(gè)專(zhuān)為物聯(lián)網(wǎng)而設(shè)計(jì)的Hypervisor

    解密 ACRN:一個(gè)專(zhuān)為物聯(lián)網(wǎng)而設(shè)計(jì)的 Hypervisor
    發(fā)表于 05-05 13:47

    嵌入式Hypervisor的相關(guān)資料分享

    https://blog.csdn.net/bbc955625132551/article/details/71597863“hypervisor 的核心要素之一是頁(yè)映射器,它將硬件指向特定操作系統(tǒng)
    發(fā)表于 11-09 07:58

    怎樣通過(guò)波形分析方法調(diào)試UART收發(fā)呢

    首先對(duì)UART數(shù)據(jù)波形進(jìn)行分析:本文通過(guò)對(duì)一步串行數(shù)據(jù)格式的分析,闡述通過(guò)波形分析方法調(diào)試UART收發(fā)原理和
    發(fā)表于 01-24 08:18

    Enea推出實(shí)現(xiàn)系統(tǒng)整合技術(shù)Enea Hypervisor

    Enea推出實(shí)現(xiàn)系統(tǒng)整合技術(shù)Enea Hypervisor Enea最新推出的Enea Hypervisor使Enea公司多核技術(shù)得到了進(jìn)一步拓展。Enea Hypervisor (在多核處理器上實(shí)現(xiàn)了多元高性能計(jì)算環(huán)境的構(gòu)建
    發(fā)表于 03-19 14:04 ?794次閱讀

    Enea Hypervisor技術(shù)培訓(xùn)簡(jiǎn)化多核開(kāi)發(fā)過(guò)程

    Enea Hypervisor技術(shù)培訓(xùn)簡(jiǎn)化多核開(kāi)發(fā)過(guò)程 Enea公司最新推出的Enea Hypervisor使Enea公司多核技術(shù)得到了進(jìn)一步拓展。Enea Hypervisor (www.enea.com/
    發(fā)表于 03-22 10:12 ?588次閱讀

    嵌入式Hypervisor了解

    https://blog.csdn.net/bbc955625132551/article/details/71597863“hypervisor 的核心要素之一是頁(yè)映射器,它將硬件指向特定操作系統(tǒng)
    發(fā)表于 11-03 20:36 ?3次下載
    嵌入式<b class='flag-5'>Hypervisor</b>了解

    虛擬化概述,Hypervisor簡(jiǎn)介

    主操作系統(tǒng)內(nèi)嵌Hypervisor擴(kuò)展,一般稱(chēng)為T(mén)ype2 Hypervisor,基本管理功能可以通過(guò)主機(jī)操作系統(tǒng)實(shí)現(xiàn),Hypervisor擴(kuò)展只專(zhuān)注于虛擬化支持,與主機(jī)操作系統(tǒng)配合實(shí)現(xiàn)虛擬化功能。這類(lèi)
    的頭像 發(fā)表于 09-09 15:03 ?8205次閱讀