Skip to content

QEMU full firmware emulation

Alex requested to merge branch/qemu into branch/unified

Current state:

(boots Canon GUI on select models, can browse Canon and ML menu on 500D with unmodified autoexec.bin, can browse ML menu with minimally modified autoexec.bin on select models, photo capture emulation on a few models)

Jenkins job:

The development will continue on this branch after merging, but the current state is already useful for merging.

For ML core, this means:

  • drop most of the old CONFIG_QEMU hacks
  • fine-tune QEMU-specific API (enabled with CONFIG_QEMU=y)

Some TODOs (not necessarily before merging; any help is welcome):

  • move old QEMU tests (e.g. hptimer) in the test suite
  • upgrade to latest QEMU (trouble at UART)
  • submit ARM patches upstream
  • refactor the code to match other QEMU machine definitions
  • move all state variables to EOSState (rather than using static variables here and there)
  • fix nondeterministic errors reproducible by many small file write calls (likely related to SD emulation or timers, not sure)
  • fix CF emulation and add tests
  • fix GUI mode switching on models other than 500D
  • use Canon's UART register for qprintf (so binaries with QEMU messages can run unmodified on the camera)
  • fix Canon's UART Dry-shell (see e.g. )
  • emulate LiveView (hard)
  • emulate external monitors (we have VRAM dumps) (hard)
  • emulate other cores alongside the main one (e.g. TX19A, Eeko, 5D4AE, 7D(2) master/slave) (hard)
  • add a nice GUI with buttons (probably easy and fun for new contributors)

Merge request reports