我一直在努力了解QEMU内部的地址转换过程,但我遇到了GVA-> GPA。
我知道QEMU使用两级描述表'PhysPageDesc'来维持GPA和&之间的转换。 HVA(主机虚拟地址),但我无法找到QEMU将GVA转换为GPA的位置,以便在TLB错过发生时转到该表以查找HVA。
我已经跟踪了内部代码,有些东西可以解决我的问题,但我无法理解,有人可以帮助我吗?
target-arm / helper.c 中的 get_phys_addr()调用了一个函数 get_level1_table_address(),它似乎就像启动一样将GVA翻译为GPA。 但我不明白声称是 MMU转换表基本选择掩码的 env-> cp15.c2_base_mask 变量。 MMU翻译表的描述在哪里?
任何建议对我都有帮助。 提前谢谢。
答案 0 :(得分:1)
您正在查看的代码(get_phys_addr()及其调用的函数)正在为ARM实现页表遍历算法。这(以及它读取的客户机内存中的数据结构)在体系结构参考手册(“ARM ARM”)中定义。要了解代码,您需要阅读体系结构规范的相关部分,以便了解我们要模拟的内容。
(例如,c2_base_mask是根据转换表基本控制寄存器(TTBCR)的'N'字段中的值预先计算的,并且是转换表基址的计算的一部分。)