我正在qemu中创建新的PCI设备,一部分是DMA,一部分是NVMe控制器。
为了使用dma_memory_read(...)
,我需要从我的新设备中获取NVMe设备的物理地址
有没有获取新设备地址的函数?
有没有其他不需要物理地址就可以使用的功能?
有没有另一种方法,通过指针?
发布于 2021-04-22 19:01:05
通常,当试图弄清楚如何在QEMU中建模设备时,最好的问题是“真正的硬件是做什么的?”
对于真正的PCI设备,它们可以访问系统中其他设备的唯一方式是它们进行DMA访问,这是它们使用PCI地址(通常与x86上的物理地址大致相同,但在其他体系结构上不一定是这样)所做的。在QEMU中,我们通过让PCI设备执行DMA访问(pci_dma_*()
)的API来对此进行建模。
另一方面,如果您的PCI卡本身实现了NVMe控制器(或另一种控制器,如SCSI盘控制器),那么答案是将磁盘直接插入控制器,然后控制器就可以与它们通信,而不涉及任何物理地址。在QEMU中,我们通过控制器设备的概念对此进行建模,控制器设备可能具有插入磁盘的“总线”。
在PCI设备和NVMe之间,真正的硬件是如何对话的?一般来说,答案不是“奇怪的后门机制”,所以你不应该在QEMU中寻找与“奇怪的后门机制”相对应的API。
https://stackoverflow.com/questions/67209600
复制相似问题