Espressif maintains a fork of QEMU in espressif/QEMU with the necessary patches to make it work on Espressif chips. See the QEMU wiki for instructions on how to build QEMU and emulate projects with it.
Once you have built QEMU, you should have
NOTE: Only ESP32 is currently supported, so make sure you are compiling for
For running our project in QEMU, we need a firmware/image with bootloader and partition table merged in it.
We can use
cargo-espflash to generate it:
cargo espflash save-image --merge ESP32 <OUTFILE> --release
If you prefer to use
espflash, you can achieve the same result by building the project first and then generating image:
cargo build --release espflash save-image --merge ESP32 target/xtensa-esp32-espidf/release/<NAME> <OUTFILE>
Now, run the image in QEMU:
/path/to/qemu-system-xtensa -nographic -machine esp32 -drive file=<OUTFILE>,if=mtd,format=raw