OVMF/QEMU shell based unit tests and writing to a virtual disk


Laszlo and others familiar with QEMU,

I am trying to write automation that boots QEMU/OVMF and then runs EFI applications and those efi applications then use the UEFI shell apis to write back to the disk their state. I am seeing very inconsistent results with sometimes it working fine while other times the disk contents are invalid. If i run multiple tests it seems like the first two work while the 3rd seems to start failing but overall it seems random.

Failing means:
Disk contents corrupted but present.
Disk contents wrong size (short).
Files that show written in UEFI shell never show up on host.

I am trying to determine if this is a known limitation with QEMU or a bug i need to track down in the unit test code.

My setup:

This is on a Windows 10 x64 host. I am running current 5.1 version of QEMU.

My script creates a folder in the Windows NTFS file system. Copies the EFI executables and startup.nsh files to it. Then starts QEMU with the following additional parameter.

-drive file=fat:rw:{VirtualDrive},format=raw,media=disk

VirtualDrive is the Windows file path of the said mentioned folder.

If interested you should be able to reproduce the results by pulling my branch and/or you can review the above.

You can see the operations here:

PR: https://github.com/microsoft/mu_tiano_platforms/pull/1

My Branch: https://github.com/spbrogan/mu_tiano_platforms/tree/personal/sebrogan/shellunittests

Or if interested you can reproduce it by following steps defined here:


and more details here

After building qemu with the right parameters for your environment you can run <your stuart_build cmd> --flashonly MARK_STARTUP_NSH=TRUE RUN_UNIT_TESTS=TRUE

For example in my environment it looks like
stuart_build -c Platforms\QemuQ35Pkg\PlatformBuild.py TOOL_CHAIN_TAG=VS2019 --flashonly RUN_UNIT_TESTS=TRUE MAKE_STARTUP_NSH=TRUE

Anyway if i recall correctly last year when we talked briefly about automation there was some concern that this would happen. Any information and/or ideas would be greatly appreciated.


Join discuss@edk2.groups.io to automatically receive all group messages.