ARM64内存虚拟化分析(3)MR API介绍
在QEMU中通常使用函数memory_region_init_io()来创建MMIO MR,并通过函数memory_region_add_subregion()将MMIO MR添加到父MR中。这里先简要介绍这两个函数。
函数memory_region_init_io()定义如下,它会创建名称为name,大小为size的mr,同时注册mr->ops,当虚拟机中访问mr范围中物理地址时,会通过mr->ops()进行模拟。
void memory_region_init_io(MemoryRegion *mr,
Object *owner,
const MemoryRegionOps *ops,
void *opaque,
const char *name,
uint64_t size)
函数memory_region_init_ram()定义如下,它会创建名称为name,大小为size的mr,同时它会为该mr分配QEMU线程的虚拟地址hva。
void memory_region_init_ram(MemoryRegion *mr,
Object *owner,
const char *name,
uint64_t size,
Error **errp)
函数memory_region_add_subregion()定义如下,它会将subregion MR添加到mr子MR中,同时subregion MR位于父MR的offset位置。
void memory_region_add_subregion(MemoryRegion *mr,
hwaddr offset,
MemoryRegion *subregion)
版权声明:本文为flyingnosky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。