Table of contents
QEMU is a CPU emulator using dynamic binary translation to convert guest CPU
instructions into host CPU instructions. It supports many architectures from
x86, through ARM and MIPS, to MicroBlaze. According to compilation configuration
target list QEMU targets 26 different softmmu types. Only for ARM it supports
33 machines (like ARM Versatile/PB (ARM926EJ-S) or Samsung NURI board
(Exynos4210)) and 28 CPUs (with cortex-a9 and pxa270). It gives access to
network, storage, video, usb, serial and other peripheral, also user defined. It
is developed under GNU GPL, so everybody are free to make modifications, improve
and extend it. This properties makes QEMU very good candidate for virtual board
Let’s start creating our Virtual Development Board. As usually I will use latest
greatest version from git:
git clone http://git.qemu.org/git/qemu.git
Compile it and install. Right now I will use only
arm-softmmu target because it
will emulate whole arm system for me. ARM right now dominated big part of
embedded market but we will see if situation won’t change in feature.
During configuration process you can encounter lack of
pixman, just accept qemu
offer to initialize it as a submodule.
git submodule update --init pixman
make # restart compilation process
If compilation ends without problem than our first component is ready to use.
Right now we can emulate our ARM based board with many types of CPUs. List of
all available can be retrieved by running command
qemu-system-arm -cpu ?, list
of emulated machines by
-M ?. Now, let’s talk about toolchains.
 Dynamically Translating x86 to LLVM using QEMU