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"을 추가하는 것은 VM 내부의 쓰기가 외부에 표시되도록 허용하는 데 중요합니다. 그렇지 않으면 읽기가 표시되지만 쓰기는 로컬이 됩니다.
적어도 이 OS/프로그램에서는 메모리 변경 사항을 확인하기 위해 백업 파일을 조사해야 합니다. 처음 몇 페이지의 주소는 0입니다.