# Linux Kernel Module Cheat

## 11. User mode simulation

Both QEMU and gem5 have an user mode simulation mode in addition to full system simulation that we consider elsewhere in this project.

In QEMU, it is called just "user mode", and in gem5 it is called syscall emulation mode.

In both, the basic idea is the same.

User mode simulation takes regular userland executables of any arch as input and executes them directly, without booting a kernel.

Instead of simulating the full system, it translates normal instructions like in full system mode, but magically forwards system calls to the host OS.

Advantages over full system simulation:

- the simulation may run faster since you don’t have to simulate the Linux kernel and several device models

- you don’t need to build your own kernel or root filesystem, which saves time. You still need a toolchain however, but the pre-packaged ones may work fine.

Disadvantages:

- lower guest to host portability:

  - TODO confirm: host OS == guest OS?

  - TODO confirm: the host Linux kernel should be newer than the kernel the executable was built for.

    It may still work even if that is not the case, but could fail is a missing system call is reached.

    The target Linux kernel of the executable is a GCC toolchain build-time configuration.

  - emulator implementers have to keep up with libc changes, some of which break even a C hello world due setup code executed before main.

    See also: Section 11.4, “User mode simulation with glibc”

- cannot be used to test the Linux kernel or any devices, and results are less representative of a real system since we are faking more

- QEMU user mode getting started

- User mode tests

- User mode Buildroot executables

- User mode simulation with glibc

- User mode static executables

- syscall emulation mode program stdin

- gem5 syscall emulation mode

- QEMU user mode quirks