我们正在模拟 Cortex M3 cpu,并希望在运行时将一些参数传递给来宾。最简单的想法似乎是直接写入某个内存区域。我尝试简单地添加,-mem-path /tmp/qemu.ram
但什么也没做。添加
-object memory-backend-file,id=mem,size=128K,mem-path /tmp/qemu.ram \
至少在 qemu 中工作过。但在运行时没有向其中写入任何内容,并且来宾内存映射和文件之间似乎根本没有任何连接。
为了澄清,我期望发生的是 QEMU 不是分配客户 RAM,而是映射文件并使用它。这将使我能够在运行时查找、读取和写入该文件。我缺少什么?是否有其他方便的方法可以在运行时对来宾的 RAM/MMIO 进行写访问?
答案1
我已经在 qemu 8.0.3 中成功演示了这一点(在 4.2.1 中失败了)
qemu-system-ppc -M ppce500,memory-backend=foo.ram -cpu e500 -m 256M,slots=2,maxmem=1g -d guest_errors,unimp -bios $PWD/test.elf -s -object memory-backend-file,size=256m,id=foo.ram,mem-path=$PWD/realmemory,share=on,prealloc=on
关键是交叉引用 id foo.ram 的“memory-backend=foo.ram”和“-object memory-backend-file”。具体来说(回答最上面的问题)添加“share=on”对于允许外部看到虚拟机内部的写入至关重要。如果没有它,读取将被看到,但写入将成为本地的。
至少在这个操作系统/程序上,我必须深入研究备份文件才能看到任何内存变化,前几页的地址为零。