vt-d 基本操作流程

29 篇文章 5 订阅
订阅专栏

在这里插入图片描述

操作步骤

在这里插入图片描述

1检查主板是否支持vt-d
  1. 检查主板是否能够支持vt-d虚拟化技术
    1.1通过cpuid
    在这里插入图片描述
    在这里插入图片描述
    1.2判断cr0 cr4
    在这里插入图片描述
    1.3 msr 3ah地址读取bit 0
    在这里插入图片描述
    1.4 分配一个4k的物理地址给vmxon参数开启vmx。vmx前32位地址需要写入版本号不然报错
    在这里插入图片描述
vmcs virtual machine control structures

在这里插入图片描述
在vmlaunch之前需要配置guest的信息。每一个guest都需要分配4k的空间。

2 vmxon && Vmx_VmClear

Vmx_VmxOn(g_VMXCPU.pVMXONRegion_PA.LowPart, g_VMXCPU.pVMXONRegion_PA.HighPart);
调用指令vmxon 分配一个4k的真实物理地址给vmxon运行空间
在这里插入图片描述
Vmx_VmClear(g_VMXCPU.pVMCSRegion_PA.LowPart, g_VMXCPU.pVMCSRegion_PA.HighPart);
vmclear 清空运行域空间初始化version.

Vmx_VmPtrld(g_VMXCPU.pVMCSRegion_PA.LowPart, g_VMXCPU.pVMCSRegion_PA.HighPart);

调用vmptrld相当于装载过程
列出汇编:

Vmx_VmPtrld Proc LowPart:dword,HighPart:dword
        push HighPart
        push LowPart
        vmptrld qword ptr [esp]
        add esp,8
        ret
Vmx_VmPtrld endp
3 配置vmcs
  1. guest state ares
    Vmx_VmWrite(GUEST_RSP, ((ULONG)g_VMXCPU.pStack) + 0x1000); //Guest 临时栈
    Vmx_VmWrite(GUEST_RIP, (ULONG)GuestEntry); // 客户机的入口点

    Vmx_VmWrite(VMCS_LINK_POINTER, 0xffffffff);
    Vmx_VmWrite(VMCS_LINK_POINTER_HIGH, 0xffffffff);

  2. host state ares
    Vmx_VmWrite(HOST_RSP, ((ULONG)g_VMXCPU.pStack) + 0x2000); //Host 临时栈
    Vmx_VmWrite(HOST_RIP, (ULONG)VMMEntryPoint); //这里定义我们的VMM处理程序入口

  3. 虚拟机运行控制域
    Vmx_VmWrite(PIN_BASED_VM_EXEC_CONTROL, VmxAdjustControls(0, MSR_IA32_VMX_PINBASED_CTLS));
    Vmx_VmWrite(CPU_BASED_VM_EXEC_CONTROL, VmxAdjustControls(0, MSR_IA32_VMX_PROCBASED_CTLS));

  4. VMEntry运行控制域
    Vmx_VmWrite(VM_ENTRY_CONTROLS, VmxAdjustControls(0, MSR_IA32_VMX_ENTRY_CTLS));

  5. VMexit运行控制域
    Vmx_VmWrite(VM_EXIT_CONTROLS, VmxAdjustControls(0, MSR_IA32_VMX_EXIT_

4

Vmx_VmLaunch();

对应的汇编指令方便理解
.686p
.model flat, stdcall
option casemap:none

.data

.code

Asm_CPUID	Proc	uses ebx esi edi fn:dword, ret_eax:dword, ret_ebx:dword, ret_ecx:dword, ret_edx:dword
        mov	eax, fn
        cpuid
        mov	esi, ret_eax
        mov	dword ptr [esi], eax
        mov	esi, ret_ebx
        mov	dword ptr [esi], ebx
        mov	esi, ret_ecx
        mov	dword ptr [esi], ecx
        mov	esi, ret_edx
        mov	dword ptr [esi], edx
        ret
Asm_CPUID 	Endp

Asm_ReadMsr		Proc	Index:dword
        mov	ecx,Index
        rdmsr
        ret
Asm_ReadMsr		Endp

Asm_WriteMsr	Proc	Index:dword,LowPart,HighPart
        mov	ecx, Index
        mov	eax, LowPart
        mov	edx, HighPart
        wrmsr
        ret
Asm_WriteMsr 	Endp

Asm_Invd Proc
        invd
        ret
Asm_Invd Endp

Asm_GetCs PROC
        mov		eax, cs
        ret
Asm_GetCs ENDP

Asm_GetDs PROC
        mov		eax, ds
        ret
Asm_GetDs ENDP

Asm_GetEs PROC
        mov		eax, es
        ret
Asm_GetEs ENDP

Asm_GetSs PROC
        mov		eax, ss
        ret
Asm_GetSs ENDP

Asm_GetFs PROC
        mov		eax, fs
        ret
Asm_GetFs ENDP

Asm_GetGs PROC
        mov		eax, gs
        ret
Asm_GetGs ENDP

Asm_GetCr0		Proc
        mov 	eax, cr0
        ret
Asm_GetCr0 		Endp

Asm_GetCr3		Proc
        mov 	eax, cr3
        ret
Asm_GetCr3 		Endp

Asm_GetCr4		Proc
        mov 	eax, cr4
        ret
Asm_GetCr4 		Endp

Asm_SetCr0		Proc 	NewCr0:dword
        mov 	eax, NewCr0
        mov	cr0, eax
        ret
Asm_SetCr0 		Endp

Asm_SetCr2		Proc 	NewCr2:dword
        mov 	eax, NewCr2
        mov	cr2, eax
        ret
Asm_SetCr2 		Endp

Asm_SetCr3		Proc 	NewCr3:dword
        mov 	eax, NewCr3
        mov	cr3, eax
        ret
Asm_SetCr3 		Endp

Asm_SetCr4		Proc	NewCr4:dword
        mov 	eax,NewCr4
        mov 	cr4, eax
        ret
Asm_SetCr4 		Endp

Asm_GetDr0 PROC
        mov		eax, dr0
        ret
Asm_GetDr0 ENDP

Asm_GetDr1 PROC
        mov		eax, dr1
        ret
Asm_GetDr1 ENDP

Asm_GetDr2 PROC
        mov		eax, dr2
        ret
Asm_GetDr2 ENDP

Asm_GetDr3 PROC
        mov		eax, dr3
        ret
Asm_GetDr3 ENDP

Asm_GetDr6 PROC
        mov		eax, dr6
        ret
Asm_GetDr6 ENDP

Asm_GetDr7 PROC
        mov		eax, dr7
        ret
Asm_GetDr7 ENDP

Asm_SetDr0 PROC
        mov		dr0, ecx
        ret
Asm_SetDr0 ENDP

Asm_SetDr1 PROC
        mov		dr1, ecx
        ret
Asm_SetDr1 ENDP

Asm_SetDr2 PROC
        mov		dr2, ecx
        ret
Asm_SetDr2 ENDP

Asm_SetDr3 PROC
        mov		dr3, ecx
        ret
Asm_SetDr3 ENDP

Asm_SetDr6 PROC nNewDr6:DWORD
        mov eax,nNewDr6
        mov		dr6, eax
        ret
Asm_SetDr6 ENDP

Asm_SetDr7 PROC	nNewDr7:DWORD
        mov eax,nNewDr7
        mov		dr7, eax
        ret
Asm_SetDr7 ENDP

Asm_GetEflags PROC
        pushfd
        pop		eax
        ret
Asm_GetEflags ENDP

Asm_GetIdtBase PROC
        LOCAL	idtr[10]:BYTE
        sidt	idtr
        mov		eax, dword PTR idtr[2]
        ret
Asm_GetIdtBase ENDP

Asm_GetIdtLimit PROC
        LOCAL	idtr[10]:BYTE
        sidt	idtr
        mov		ax, WORD PTR idtr[0]
        ret
Asm_GetIdtLimit ENDP

Asm_GetGdtBase PROC
        LOCAL	gdtr[10]:BYTE
        sgdt	gdtr
        mov		eax, dword PTR gdtr[2]
        ret
Asm_GetGdtBase ENDP

Asm_GetGdtLimit PROC
        LOCAL	gdtr[10]:BYTE
        sgdt	gdtr
        mov		ax, WORD PTR gdtr[0]
        ret
Asm_GetGdtLimit ENDP

Asm_GetLdtr PROC
        sldt	eax
        ret
Asm_GetLdtr ENDP

Asm_GetTr PROC
        str	eax
        ret
Asm_GetTr ENDP

Vmx_VmxOn Proc LowPart:dword,HighPart:dword
        push HighPart
        push LowPart
        Vmxon qword ptr [esp]
        add esp,8
        ret
Vmx_VmxOn Endp

Vmx_VmxOff Proc
        Vmxoff
        ret
Vmx_VmxOff Endp

Vmx_VmPtrld Proc LowPart:dword,HighPart:dword
        push HighPart
        push LowPart
        vmptrld qword ptr [esp]
        add esp,8
        ret
Vmx_VmPtrld endp

Vmx_VmClear Proc LowPart:dword,HighPart:dword
        push HighPart
        push LowPart
        vmclear qword ptr [esp]
        add esp,8
        ret
Vmx_VmClear endp

Vmx_VmRead Proc uses ecx Field:dword
        mov eax,Field
        vmread ecx,eax
        mov eax,ecx
        ret
Vmx_VmRead endp

Vmx_VmWrite Proc uses ecx Field:dword,Value:dword
        mov eax,Field
        mov ecx,Value
        vmwrite eax,ecx
        ret
Vmx_VmWrite endp

Vmx_VmCall Proc
        vmcall
        ret
Vmx_VmCall endp

Vmx_VmLaunch Proc
        vmlaunch
        ret
Vmx_VmLaunch endp

Vmx_VmResume Proc
        vmresume
        ret
Vmx_VmResume endp


END

非常感谢原作者分享:https://www.bilibili.com/video/BV1q4411P7LK?p=4&spm_id_from=pageDriver

打开VT-x/VT-d功能
L_Nan的专栏
12-24 2万+
在BIOS中可以打开CPU的VT-x/VT-d功能(这里默认CPU支持VT-x/VT-d虚拟化技术)。 如果不想重启电脑,我们如何判断是否开启了CPU的虚拟化支持呢?在Linux系统,可以通过下面的方法判断。首先判断CPU是否支持VT-x技术? 如果grep --color vmx /proc/cpuinfo执行结果flags中有 vmx ,那么该CPU支持VT-x技术。 flags中有 vmx
Intel VT-d(1)- 简介
10-28 1万+
Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA操作和中断传递进行重定向,从而辅助VMM(Virtual Machine Monitor)实现I/O子系统的虚拟化。 一般情况下VM...
VT-D 学习交流
08-24
关于VT-D spec 的学习,整理。 1.对虚拟化I/O硬件支持的功能概述 2.DMA重映射过程 3.中断重映射过程 4.中断发布过程
开启 intel vt-d
weixin_30485379的博客
07-04 1573
1、开机后按“DEL”或“F2”进入BIOS; 2、在Advanced选项页中找到System Agent Configuration并选择进入; 3、进入System Agent Configuration后将VT-D选项设置为Enabled即可。 设置完成后点击F10键即可保存BIOS中的设置,机器会自动重启 转载于:https://www.cnblogs.com/wan...
Intel VT-d(3)- 中断重映射
11-11 4423
VT-d硬件中除了包含DMA重映射硬件外,也会包含中断重映射硬件,该中断重映射单元让系统软件能够对I/O设备产生的中断(包括从I/O APIC发送过来的中断,I/O设备产生的以MSI、MSI-X形式传递的中断,不包含中断重映射硬件本身产生的中断)的传输进行控制,而不仅仅取决于硬件的连接。 对于VT-d硬件而言,中断请求就是从外面发送进来对物理地址范围0xFEEX_XXXXh的写请求。VT-d中,...
Intel 处理器 VT-d 架构 Kernel DMA 保护机制研究
systemino的博客
06-18 6634
这篇文章是对Intel VT-d入门研究的总结,主要是关于DMA重映射编程以及Windows上使用的内容,希望本文可以帮助你对它有一个基本的了解,并在感兴趣的基础上开始研究更多细节。 英特尔VT-d 英特尔VT-d(正式名称是定向I / O的英特尔VT)具有以下三个功能: ·DMA Remapping ·Interrupt Remapping ·Interrupt Posting DMA重映射是其中最常讨论的功能,也是本文的重点。 DMA重映射 DMA重映射是一项重要功能,因为它允许软...
某公司仓库SAP作业指导书及基本操作.docx
02-16
本指导书主要涉及仓库管理的相关流程和SAP中的基本操作,包括发货、收货、状态转移、退货、报废以及查询等关键环节。 一、流程图 1. 原材料/包装材料由新科安达NDC转到XXX黄埔厂:此过程涉及供应链管理,通过物料...
某公司仓库SAP作业指导书与基本操作.doc
09-18
本指导书主要涉及了原材料、包装材料、成品的转仓流程,补仓操作,正常订单处理,退货以及报废等关键业务环节,并详细阐述了各个模块的基本操作事务代码。 **一、流程图** 1. **原材料/包装材料转仓** - 从新...
kvm-vt-d
cybertan的专栏
02-14 5620
How to assign devices with VT-d in KVM [edit] VT-d support In order to assign devices in KVM, you'll need a system which supports VT-d. This has nothing to do with the VT-x support of your CP
VT-d DMA Remapping简介
weixin_50518899的博客
03-22 830
VT-d DMA Remapping的硬件能力主要是由IOMMU来提供,通过引入根Context Entry和IOMMU Domain Page Table等机制来实现直通设备隔离和DMA地址转换的目的。那么具体是怎样实现的呢?下面将对其进行介绍。根据DMA Request是否包含地址空间标志(address-space-identifier)我们将DMA Request分为2类不含地址空间标志的DMA Request。
Intel VT 性能测试
jiaxu2000的博客
03-29 1010
熟悉Intel的玩家都知道,Intel在Pentium D 9X0处理器时开始引入VT(Virtualization Technology),VT的好处早在去年我就在blog上介绍过——《硬件虚拟技术初探》,VMware从2005年11月的VMware WorkStation 5.5开始也提供了对VT的支持,到底VT可以给虚拟机性能带来多大的提升呢?今天我做了一个小小的测试。 主机平台:俺的...
kvm vt-d 功能的配置
weixin_33969116的博客
12-09 552
在kvm中,客户机可以使用的设备大概可以分为以下三类: (1)Emulated device:纯软件模拟的设备 (2)virtio device:实现virtio api的半虚拟化驱动的设备 (3)pci device assginment:pci设备直接分配 前面两种类型之前都已经提及过,纯软件模拟的好处是对硬件平台依赖性较低,可以模拟一些较好的设备,不需要客户机额外支持,...
【x86架构】Intel VT-d(1)- 简介
humanof的专栏
09-15 1261
Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA操作和中断传递进行重定向,从而辅助VMM(Virtual Machine Monitor)实现I/O子系统的虚拟化。 一般情况下VMM支持I/O虚拟化可以通过以下四种方式实现: 纯软件模拟。即VMM的软件模拟一个现有的I/O设备,这种方式具有较好
linux下检查项目是否启动,Linux 下检查 VT-d / IOMMU 是否开启
weixin_36472625的博客
05-13 2665
介绍VT-d 和 IOMMU 其实都是指的 I/O 虚拟化,只不过前者是 Intel 的叫法,后者是 AMD 的叫法:VT-d 全称为 Intel® Virtualization Technology for Directed I/OIOMMU 全称为 Input/Output Memory Management Unit这项技术是可以让PCI-e设备的资源直接分配给虚拟机,即 PCI直通。举个例...
Intel VT-d实现概述
最新发布
qq_38350702的博客
03-29 946
VT-d硬件接收到其旗下I/O设备传递过来的中断请求时,会先查看自己的中断重定向功能是否打开,如果没有打开则,直接上传给LAPIC。如果中断重定向功能打开,则会查看中断请求的格式,如果是不可重定向格式,则直接将中断请求提交给LAPIC。如果是可重定向的格式,则会根据算法计算Interrupt_Index值,对中断重定向表进行索引找到相应的IRTE。
VT-x,VT-d简介
热门推荐
bob的博客
06-29 2万+
虚拟化分软件虚拟化和硬件虚拟化,没有VT-x也能虚拟化,很老的机器都可以跑VMWare,因为使用了软件虚拟化的方式,不过运行效率肯定没有硬件虚拟化的高; 硬件虚拟化分两种:CPU层和IO层/芯片层,在Intel平台上,CPU层的虚拟化技术叫VT-x,IO层/芯片层叫VT-d; 一个CPU/一套平台可以同时支持VT-x和VTd,或者都不支持,或者只支持VT-x,决不可能只支持VT-d; 现阶段英特尔SNB/IVB平台都能保证支持VT-x; AMD的虚拟化技术叫AMD-v; 硬件虚拟化需软件支持,例如微软的H.
Intel VT技术:从VT-x到VT-d的虚拟化演进
"Intel的虚拟化技术从VT-x发展到VT-d,标志着x86架构在虚拟化领域的显著进步。虚拟化技术的核心在于提高资源的共享率和利用率,通过在单个硬件平台上运行多个操作系统和应用程序,实现了IT环境的优化和效率提升。这...
写文章

热门文章

  • android avb(Android Verified Boot)验证 23539
  • python 的import的含义 19367
  • linux内核 设备号及其devices list (一) 17111
  • Linux下objdump使用方法 13729
  • pcie 配置空间 基地址寄存器(BAR)详解 10431

分类专栏

  • ros 5篇
  • arm 1篇
  • 应用程序 10篇
  • acrn 29篇
  • 同步机制 3篇
  • 汇编 1篇
  • usb学习积累 3篇
  • stm32_f407 7篇
  • dpdk 4篇
  • yocto 3篇
  • EtherCAT 6篇
  • gstream 专栏 1篇
  • linux内核 60篇
  • python 11篇
  • c语言 6篇
  • android 11篇
  • shell 3篇
  • 单片机 1篇
  • selinux 3篇
  • itop4412 9篇
  • c++ 4篇
  • 常用命令 10篇
  • java 1篇
  • opengl
  • openssl 6篇

最新评论

  • ecrt_master_application_time

    zheng是在下: 真能水

  • stm32 启动过程 以及中段重定位

    CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/7960222, 请多输出高质量博客, 帮助更多的人

  • raw,img格式虚拟机磁盘空间扩容

    搭车去柏林<‘^′>: 但是为啥拷贝后的没法启动?

  • pcie 配置空间 基地址寄存器(BAR)详解

    Alwin_vx: 这个应该是cpu芯片厂固定分配的

  • pcie 配置空间 基地址寄存器(BAR)详解

    rfc_happy: 没搞明白这个0xF9000000地址是怎么得到的

最新文章

  • ros源码编译
  • U-boot中SPL功能和源码流程分析
  • linux下反汇编命令
2024年1篇
2023年1篇
2022年28篇
2021年20篇
2020年44篇
2019年111篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家商场摩天轮美陈河北玻璃钢雕塑仿青铜绍兴多彩玻璃钢雕塑南阳哪里有玻璃钢人物雕塑厂家浙江玻璃钢雕塑摆件售价商场美陈布置 成都主题商场美陈批发价吕梁玻璃钢广场雕塑价格商场美陈产品方案圣诞节商场美陈装置广东省玻璃钢雕塑厂家聊城玻璃钢雕塑开业商场美陈哪里买商场 美陈 英语怎么说新余市玻璃钢花盆上海玻璃钢雕塑哪里有镂空玻璃钢彩绘雕塑厂家玻璃钢卡通水果雕塑单价红色玻璃钢人物雕塑济南玻璃钢雕塑价位仙桃广场玻璃钢雕塑长沙哈萨克玻璃钢人物雕塑福建主题商场美陈市场价福建大型玻璃钢雕塑清远玻璃钢人物雕塑供应厂家通化火烈鸟玻璃钢雕塑公司淮安玻璃钢人物雕塑供货商河南玻璃钢花盆定做玻璃钢圣诞树雕塑图片安阳大象玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化