2015-07-02 73 views
1

目前我正在试图运行的qemu系统臂的ARMv7架构,做分页一些初始设置,然后启用MMU。的Qemu:跟踪MMU操作

我用gdb stub运行qemu,然后用gdb连接到它。

我必须拧东西了转换表/寄存器/等,事情是我设置MMU使能控制寄存器位分钟,GDB不能再从内存中取数据:后命令,执行mmu使能指令它不会获取下一个命令,我不能访问内存。

有什么方法可以看看Qemu的MMU内发生了什么?哪里需要翻译表,什么计算等。

或者我应该只用我的附加调试输出重新编译它?

+0

转换表地址存储在ttrb0/1寄存器中。在这个表中,mmu做了什么解释在armv7参考手册 –

+0

@AlexHoppus我不能同意更多,但我想检查我的描述符,这是一种调试输出将会有用的地方。无论如何,我已经将qemu资源排序并添加了我自己的日志... – olegst

回答

1

不,没有办法跟踪这个,如果你自己修改QEMU的源代码来添加调试输出。这是一个更为普遍的趋势的特定情况,即QEMU的设计和方法在很大程度上是“快速运行正确的代码”,而不是详细反省可能会出错的客人的行为。有时,在这种情况下,有一个很好的方便位置来添加您自己的调试打印;有时,正如打印访客所做的所有内存访问的相当常见的愿望一样,C代码中没有任何地方可以跟踪所有访问。

0

没有,有没有办法跟踪此无需修改QEMU的来源自己

所以我做到了。 get_phys_addr *功能 - 对于ARM架构,相关代码在目标臂/ helper.c找到。

0

当我使用QEMU调试与同事构建的操作系统内核中的VM问题时,我最终连接GDB来调试QEMU(而不是调试QEMU中的客户进程)。

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