blob: ab35c75ebd6a733e1b8a55947cfb010204b20c6e [file] [log] [blame] [view]
# Fuchsia emulator (FEMU)
The Fuchsia emulator (FEMU) allows you to test Fuchsia components and applications without needing a Fuchsia device.
FEMU is included in Fuchsia source, and its downloaded by `jiri` as part of `jiri update` or `jiri run-hooks`.
Its fetched into the Fuchsia directory `/prebuilt/third_party/aemu`.
You can call FEMU with `fx` using the `fx emu` command, or from the Fuchsia IDK using `femu.sh`.
## FEMU and other emulators {#femu-and-other-emulators}
FEMU is the default emulator for Fuchsia. FEMU is based on the
[Android Emulator (AEMU)](https://developer.android.com/studio/run/emulator), which is a fork of
[QEMU](https://www.qemu.org/). Due to legacy issues, there may be references to AEMU in the code and documentation.
In some instances, such as [emulating Zircon](#emulating-zircon), you must use QEMU instead.
## FEMU Features {#femu-features}
FEMU looks and behaves like a Fuchsia device, with the exception that no paving is required.
FEMU features include:
* **GUI Support:** You can run Fuchsia with the GUI (by default) or without the GUI
(using the `--headless` argument with the [fx emu](https://fuchsia.dev/reference/tools/fx/cmd/emu) command)
* **GPU Support:** You can run with the hosts GPU (by default) with full
[Vulkan](/docs/concepts/graphics/magma/vulkan.md) support, or you can choose
software rendering using [SwiftShader](https://swiftshader.googlesource.com/SwiftShader/).
* **Remote Development:** You can use a remote desktop with FEMU, either with Chrome Remote Desktop
or from the command line using [fx emu-remote](https://fuchsia.dev/reference/tools/fx/cmd/emu-remote)
command or `femu.sh` with the Fuchsia IDK.
To configure these features, see the [Running Fuchsia Emulator](/docs/development/run/femu.md)
page. Additional features are listed in the [fx emu](https://fuchsia.dev/reference/tools/fx/cmd/emu) reference page.
If youre using the Fuchsia IDK, `femu.sh` supports the same flags as `fx emu`.
## FEMU limitations {#femu-limitations}
### FEMU image and board support {#femu-image-and-board-support}
When setting up FEMU using `fx emu`, FEMU only supports the following boards:
* `qemu-x64`
* `qemu-arm64`
When using the Fuchsia IDK to set up FEMU, you are limited to the following pre-built images:
* `qemu-x64`
* `workstation.qemu-x64-release`
* `qemu-arm64`
### FEMU networking {#femu-networking}
The Fuchsia Emulator should generally be run with the `-N` flag that provides networking through an
emulated NIC. Instructions for setting up networking for FEMU is in
[Setting up the Fuchsia Emulator](/docs/get-started/set_up_femu.md).
Without networking, you only have an isolated serial console. With networking,
your device is visible to other tools such as `ssh` and `fx serve`.
### Emulating Zircon {#emulating-zircon}
If you only want to emulate Zircon, you must use `fx qemu` instead. Read
[Debugging the Kernel using QEMU](/docs/development/debugging/qemu.md) to
learn more. This is for kernel developers. Most Fuchsia developers do not need
to use this workflow.
## FEMU common usage {#femu-common-usage}
To use FEMU, you must first
[download the Fuchsia source](/docs/get-started/get_fuchsia_source.md)
and [build Fuchsia](/docs/get-started/build_fuchsia.md).
Alternatively, you can use the Fuchsia IDK and use pre-built system images.
Then you can use FEMU to do the following:
* [Set up and configure FEMU](/docs/get-started/set_up_femu.md)
* [Run FEMU](/docs/development/run/femu.md)
* [Test components](/docs/development/run/run-test-component.md)
* [Run end-to-end tests](/docs/development/testing/run_an_end_to_end_test.md)