# QEMU Basics **QEMU** comes in two variants: system mode for full machine emulation, and user mode for single-binary emulation. Install with `apt install qemu-system qemu-user-static` on Debian/Ubuntu. ```bash qemu-system-arm -M versatilepb -kernel zImage -nographic # full machine qemu-arm ./binary # single binary ``` System mode (`qemu-system-*`) emulates an entire machine—CPU, memory, disk, peripherals—and boots a full OS. User mode (`qemu-arm`, `qemu-riscv64`, etc.) emulates only CPU instructions for a single process, translating syscalls to the host kernel. User mode is lighter weight when you just need to run one foreign-architecture binary. Common flags across both modes: ``` -M machine machine/board type (versatilepb, virt, etc.) -kernel file load kernel image -dtb file load device tree -append "args" kernel command-line arguments -nographic no GUI, use serial console on terminal -m size memory (e.g., -m 512M, -m 4G) -smp N number of CPUs ``` User mode is invoked transparently via `binfmt_misc` when `qemu-user-static` is installed. A foreign-architecture binary executes as if native; QEMU intercepts syscalls and translates them. System mode typically runs headless with `-nographic` for embedded testing. Remove `-nographic` to open a GUI window (useful for desktop OS testing, but slower over SSH).