Emulator Used
QEMU: QEMU is a machine emulator. It can be used to run an unmodified target operating system and all its applications on a virtual machine. Several different host operating systems are supported including Android, Linux, Mac OS X and Windows. The host and target CPUs can be different. QEMU is primarily used for three things:
1) Running one operating system on another, for example Android on Linux.
2) Debugging since the virtual machine can be stopped and its state can inspected, saved and restored.
3) Simulation of specific embedded systems can be achieved by adding new machine descriptions and new emulated devices.
QEMU uses a dynamic binary translator to perform runtime conversions of the target CPU instructions into the host instruction set. The resulting binary code is stored in a translation cache so that it can be reused.
1) Running one operating system on another, for example Android on Linux.
2) Debugging since the virtual machine can be stopped and its state can inspected, saved and restored.
3) Simulation of specific embedded systems can be achieved by adding new machine descriptions and new emulated devices.
QEMU uses a dynamic binary translator to perform runtime conversions of the target CPU instructions into the host instruction set. The resulting binary code is stored in a translation cache so that it can be reused.
Fiasco Microkernel
A microkernel developed by a group at TU-Dresden. A microkernel is a component at the lowest level of the software stack. It is the only piece of software that is running in the privileged mode of the processor. The kernel provides primitives to execute programs in tasks, to enforce isolation among them, and to provide means of secure communication in order to let them cooperate. As the kernel is the most privileged, security-critical software component in the system, it is a general design goal to make it as small as possible in order to reduce its attack surface. It provides only a minimal set of mechanisms that are necessary to support applications. It does not include complex services such as program loading, device drivers, or file systems; those are implemented in user-level programs on top of it (a basic set these services and abstractions is provided by the L4Re).
L4 Runtime Environment (L4RE)
The L4RE was made in conjunction with Fiasco as the run-time environment for the kernel. Both need to be built to have a working underlying foundation for the Android OS to sit on top of. This piece of software includes the necessary interfaces to allow the kernel to interact with the low level hardware and OS, as well as provide the root pager (sigma0) and the root task (Moe). Both of which are required for getting this to run on QEMU. This environment also includes the MMU which is modified to enable TrustZone calls from the OS.
Operating System - L4Android
L4Android is derived from the L4Linux project, which is developed at the Technische Universität Dresden. L4Linux is a modified Linux kernel, which runs on top of the Fiasco.OC microkernel. It is binary compatible with the normal Linux kernel. L4Android combines both the L4Linux and Google modifications of the Linux kernel and thus enables us to run Android on top of a microkernel. The L4Android kernel supports the x86 and ARM platform and both Froyo (2.2) and Gingerbread (2.3) releases are supported.