- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QEMU中挂载vTPM 笔记
QEMU中挂载vTPM步骤
在Qemu的/hw目录下添加vTPM.c文件,步骤如下:首先定义vTPM的设备管理结构体,其中包含设备名称、设备描述、初始化函数和读写配置文件函数。增加了保存新PCI 设备的状态数据结构vTPMState
static PCIDeviceInfo vTPM_info={
.qdev.name=“vTPM”, //定义设备名称
.qdev.desc=“vTPM for QEMU”, //设备描述
.qdev.size=sizeof(vTPMState), //vTPM状态结构大小,用于保存其状态数据
.init=vTPM_init, //定义PCI设备初始化函数,初始化PCI各种属性
.config_write = pci_ hardware_manager _write_config,
.config_read = pci_ hardware_manager _read_config,
};
typedef struct vTPMState_t{
//PCI设备信息
PCIDevice *pci_dev;
//TPM状态,可用/不可用,激活/未激活,占有/未占有的状态组合
Unsigned char status;
//传输包
Unsigned char buf[TPM_MAX_DATA];
uint32_t addr;
uint8_t index;
uint8_t status;
uint32_t offset;
uint8_t buf[TPM_MAX_PKT];
} vTPMState;
vTPM_init函数会在QEMU开启的时候统一调用。vTPM_init用于初始化vTPM属性,包括设置PCI的厂商ID号(vendor_id)和设备ID号(device_id),PCI bar空间的大小以及端口映射函数vTPM_map等,在vTPM_map函数中注册对vTPMState的读写函数。
在QEMU中,在初始化我们的硬件设备的时候需要注册我们的IO空间,对于PCI设备来说,IO地址注册就要多一步,因为要进行PCI bar地址与IO的映射,所以必须先调用下面函数来给bar注册PCI地址(给bar分配IO地址)。
原函数:void pci_register_bar(PCIDevice *pci_dev, int region_num,??????????????????????????? pcibus_t size, int type,??????????????????????????? PCIMapIORegionFunc *map_func);
第一个参数是PCI设备指针;第二个参数是bar的编号,每个PCI设备有6个bar,对应0-5,也就是6个region;第三个是分配的IO地址空间范围;第四个参数表示IO类型是PIO还是MMIO;最后一个参数是我们要进行IO读写映射函数指针。
我们可以发现这里并没有给设备分配IO空间的基地址,只有一个空间长度而已,这也进一步说明PCI设备在QEMU中一般是随机动态分配空间的,通过不断的updatemapping来不断更新IO空间的映射。
static void map_func(PCIDevice *pci_dev,int region_num,?pcibus_t addr,pcibus_t size,int type);
第一个依然是PCI设备指针,第三个是PCI地址映射的PIO起始地址,这个起始地址是在我们注册PCI地址的时候,PCI总线通过计算比较PIO地址空间得到的一个PIO地址起始空间,所以这里不能够随便的改变,因为PCI地址空间需要和PIO空间进行映射。所以在我们注册设备PIO空间的时候必须将这个地址作为注册IO空间的起始地址。这个函数是在更新bar映射的时候被调用的,实际上它的作用就是给PCI设备安装IO读写函数,能够操作IO
调用QEMU的pci_regiser_bar注册PCI 地址
pci_regiser_bar(pci_dev,0,SIZE,PCI_BAR_ADDRESS_SPACE_IO, vTPM_map);
PCI_BASE_ADDRESS_SPACE_IO (别人)
实现映射函数,PCI bar地址初始化以后会将映射IO的起始地址作为start_addr参数传到映射函数,然后通过之前的register函数注册IO地址空间,在这个操作以后,一旦这些位的IO发生读写,虚拟机就会产生VM-exit,进而我们的ioread和iowrite就能够被调用。
//在vTPM_map函数中调用QEMU的register_ioport_write注册对vTPMState的写函数, 调用QEMU的re
您可能关注的文档
- 关于质心提取的若干图像处理问题的总结.doc
- 使用IO内存控制硬件点亮LED灯.doc
- AE—3D Channel三维通道特效中文.doc
- 租车常用英语.docx
- OD-1000测浓度使用说明书(onedrop).doc
- eXosip简例.docx
- Netfilter新增target模块浅析 - Copy.docx
- 外研社版高中英语必修四词汇表(默写版).docx
- 八下知识讲解U6.doc
- 电动托盘搬运车CBD图片 价格 参数.doc
- 抢分秘籍10 带电粒子电场中的直线运动、偏转和交变电电场中的应用(三大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍11 带电粒子在组合场、叠加场中的运动(五大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍11 带电粒子在组合场、叠加场中的运动(五大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍12 电磁感应中的电路与图像问题(二大题型)(解析版) -2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍12 电磁感应中的电路与图像问题(二大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍14 热力学定律与气体实验定律综合应用(五大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍13 电磁感应中的动力学、能量和动量问题(三大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍14 热力学定律与气体实验定律综合应用(五大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍16 振动图像与波动图像的综合应用(三大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍15 光的折射、全反射的综合应用(二大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
文档评论(0)