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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>