Qemu:跟踪MMU操作

时间:2015-07-02 14:44:57

标签: arm qemu emulation

目前我正在尝试为 armv7 架构运行 qemu-system-arm ,为分页做一些初始设置,然后启用MMU。

我使用gdb存根运行qemu并使用gdb连接到它。

我必须搞砸翻译表/寄存器/等等,事情就是我在控制寄存器中设置MMU使能位,gdb不能再从内存中获取数据了: ni 执行mmu-enable指令的命令,它不会获取下一个命令,我无法访问内存。

有没有办法看看Qemu的MMU内部会发生什么?它需要翻译表,计算等等。

或者我应该用我的额外调试输出重新编译它?

3 个答案:

答案 0 :(得分:1)

不,如果不自行修改QEMU的源代码来添加调试输出,则无法跟踪此情况。这是一个更普遍趋势的特定情况,即QEMU的设计和方法主要是“快速运行正确的代码”,而不是对可能有错误的客人的行为进行详细的反省。有时,就像在这种情况下,有一个很好的简单位置来添加自己的调试打印;有时候,就像打印客户所做的所有内存访问的相当普遍的愿望一样,在C代码中没有任何地方可以进行跟踪来捕获所有访问。

答案 1 :(得分:0)

  

不,如果不自行修改QEMU的来源,就无法追踪这一点

所以我做到了。对于ARM体系结构,相关代码可在 target-arm / helper.c - get_phys_addr * 函数中找到。

答案 2 :(得分:0)

当我使用QEMU来调试我与同事一起构建的操作系统内核中的VM问题时,我最终将GDB连接到调试QEMU(而不是调试QEMU中的guest虚拟机进程)。

您可以在MMU表行走功能上放置断点并逐步执行。