目前我正在試圖運行的qemu系統臂爲的ARMv7架構,做分頁一些初始設置,然後啓用MMU。的Qemu:跟蹤MMU操作
我用gdb stub運行qemu,然後用gdb連接到它。
我必須擰東西了轉換表/寄存器/等,事情是我設置MMU使能控制寄存器位分鐘,GDB不能再從內存中取數據:後妮命令,執行mmu使能指令它不會獲取下一個命令,我不能訪問內存。
有什麼方法可以看看Qemu的MMU內發生了什麼?哪裏需要翻譯表,什麼計算等。
或者我應該只用我的附加調試輸出重新編譯它?
目前我正在試圖運行的qemu系統臂爲的ARMv7架構,做分頁一些初始設置,然後啓用MMU。的Qemu:跟蹤MMU操作
我用gdb stub運行qemu,然後用gdb連接到它。
我必須擰東西了轉換表/寄存器/等,事情是我設置MMU使能控制寄存器位分鐘,GDB不能再從內存中取數據:後妮命令,執行mmu使能指令它不會獲取下一個命令,我不能訪問內存。
有什麼方法可以看看Qemu的MMU內發生了什麼?哪裏需要翻譯表,什麼計算等。
或者我應該只用我的附加調試輸出重新編譯它?
不,沒有辦法跟蹤這個,如果你自己修改QEMU的源代碼來添加調試輸出。這是一個更爲普遍的趨勢的特定情況,即QEMU的設計和方法在很大程度上是「快速運行正確的代碼」,而不是詳細反省可能會出錯的客人的行爲。有時,在這種情況下,有一個很好的方便位置來添加您自己的調試打印;有時,正如打印訪客所做的所有內存訪問的相當常見的願望一樣,C代碼中沒有任何地方可以跟蹤所有訪問。
沒有,有沒有辦法跟蹤此無需修改QEMU的來源自己
所以我做到了。 get_phys_addr *功能 - 對於ARM架構,相關代碼在目標臂/ helper.c找到。
當我使用QEMU調試與同事構建的操作系統內核中的VM問題時,我最終連接GDB來調試QEMU(而不是調試QEMU中的客戶進程)。
您可以在MMU表格行走功能上放置斷點並逐步完成。
轉換表地址存儲在ttrb0/1寄存器中。在這個表中,mmu做了什麼解釋在armv7參考手冊 –
@AlexHoppus我不能同意更多,但我想檢查我的描述符,這是一種調試輸出將會有用的地方。無論如何,我已經將qemu資源排序並添加了我自己的日誌... – olegst