2024年4月24日发(作者:)

QEMU中挂载vTPM步骤

在Qemu的/hw目录下添加vTPM.c文件,步骤如下:首先定义vTPM的设备管理结

构体,其中包含设备名称、设备描述、初始化函数和读写配置文件函数。增加了保存新PCI

设备的状态数据结构vTPMState

static PCIDeviceInfo vTPM_info={

.=“vTPM”, //定义设备名称

.=“vTPM for QEMU”, //设备描述

.=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的读写函数。