blob: d05e44b52ebbf1d54a458f88d0d112025dedad0e [file] [log] [blame] [view]
# Set up and start the Fuchsia emulator (FEMU)
This document describes how to set up and run the Fuchsia emulator (FEMU), including networking
and GPU support setup.
## Prerequisites
To run FEMU, you must have
* [Fuchsia source installed and environment variables created](/docs/get-started/get_fuchsia_source.md)
* [Configured and built Fuchsia](/docs/get-started/build_fuchsia.md)
### Building Fuchsia for FEMU
Before you can use FEMU, you need to build Fuchsia using `fx set`,
specifying a qemu board and supported product. This example uses
`qemu-x64` for the board and `workstation` for the product:
<pre class="prettyprint">
<code class="devsite-terminal">fx set workstation.qemu-x64 --release [--with=...]</code>
<code class="devsite-terminal">fx build</code>
</pre>
Note: More information on supported boards and products is in the
[Fuchsia emulator overview](/docs/concepts/emulator/index.md).
## Configure network
For Fuchsia's ephemeral software to work with FEMU, you need to configure
an IPv6 network.
* [Linux configuration](#linux-config)
* [macOS configuration](#mac-config)
### Linux {#linux-config}
To enable networking in FEMU using [tap networking](https://wiki.qemu.org/Documentation/Networking#Tap), run the following commands:
<pre class="prettyprint">
<code class="devsite-terminal">sudo ip tuntap add dev qemu mode tap user $USER</code>
<code class="devsite-terminal">sudo ip link set qemu up</code>
</pre>
### macOS {#mac-config}
[User Networking (SLIRP)](https://wiki.qemu.org/Documentation/Networking#User_Networking_.28SLIRP.29){: .external} is the default networking set up for FEMU on macOS. This networking set up does not support Fuchsia device discovery.
## Start FEMU
The most common way to run FEMU is with networking enabled, using the following commands.
### Linux {#linux-start-femu}
To support device discovery without access to external networks.
```posix-terminal
fx vdl start -N
```
To get access to external networks:
{% dynamic if user.is_googler %}
Note: Command will differ depending on the type of machines you use.
* {Corp}
```posix-terminal
fx vdl start -N -u /usr/bin/shortleash-upscript
```
* {Non-Corp}
Note: `FUCHSIA_ROOT` is the path to the Fuchsia checkout on your local machine (ex: `~/fuchsia`).
```posix-terminal
fx vdl start -N -u {{ '<var>' }}FUCHSIA_ROOT{{ '</var>' }}/scripts/start-unsecure-internet.sh
```
{% dynamic else %}
Note: `FUCHSIA_ROOT` is the path to the Fuchsia checkout on your local machine (ex: `~/fuchsia`).
```posix-terminal
fx vdl start -N -u {{ '<var>' }}FUCHSIA_ROOT{{ '</var>' }}/scripts/start-unsecure-internet.sh
```
{% dynamic endif %}
Once you run the command, a separate window opens with the title "Fuchsia Emulator". After
the Fuchsia emulator launches successfully, the terminal starts with the SSH console. You
can run shell commands in this window, just like you would on a Fuchsia device.
### macOS {#mac-start-femu}
On macOS, Fuchsia device discovery does not work. However, you can still use `fx` tools such as `fx ssh`.
```posix-terminal
fx vdl start --host-gpu
```
From the output, take note of the instruction on running `fx set-device`, you will need it for the steps below.
Note: When you launch FEMU for the first time on your Mac machine after starting up (ex: after a reboot),
a window pops up asking if you want to allow the process “aemu” to run on your machine.
Click “allow”.
Run `fx set-device` to specify the launched Fuchsia emulator SSH port. For `SSH_PORT`, use the value that the `fx vdl start --host-gpu` command outputted.
```posix-terminal
fx set-device 127.0.0.1:{{ '<var>' }}SSH_PORT{{ '</var>' }}
```
## Additional FEMU options
### Input options
By default FEMU uses a mouse pointer for input. You can add the argument `--pointing-device touch`
for touch input instead.
```posix-terminal
fx vdl start --pointing-device touch
```
### Run FEMU without GUI support
If you don't need graphics or working under the remote workflow, you can run FEMU in headless mode:
```posix-terminal
fx vdl start --headless
```
### Specify GPU used by FEMU
By default, FEMU launcher uses software rendering using [SwiftShader](https://swiftshader.googlesource.com/SwiftShader/).
To force FEMU to use a specific graphics emulation method, use the parameters `--host-gpu` or `--software-gpu` to the `fx vdl start` command.
These are the valid commands and options:
<table><tbody>
<tr>
<th>GPU Emulation method</th>
<th>Explanation</th>
<th><code>fx vdl start</code> flag</th>
</tr>
<tr>
<td>Hardware (host GPU)</td>
<td>Uses the host machine’s GPU directly to perform GPU processing.</td>
<td><code>fx vdl start --host-gpu</code></td>
</tr>
<tr>
<td>Software (host CPU)</td>
<td>Uses the host machine’s CPU to simulate GPU processing.</td>
<td><code>fx vdl start --software-gpu</code></td>
</tr>
</tbody></table>
### Supported hardware for graphics acceleration {#supported-hardware}
FEMU currently supports a limited set of GPUs on macOS and Linux for
hardware graphics acceleration. FEMU uses a software renderer fallback for unsupported GPUs.
<table>
<tbody>
<tr>
<th>Operating System</th>
<th>GPU Manufacturer</th>
<th>OS / Driver Version</th>
</tr>
<tr>
<td>Linux</td>
<td>Nvidia Quadro</td>
<td>Nvidia Linux Drivers <a href="https://www.nvidia.com/download/driverResults.aspx/160175/en-us">440.100</a>+</td>
</tr>
<tr>
<td>macOS</td>
<td><a href="https://support.apple.com/en-us/HT204349#intelhd">Intel HD Graphics</a></td>
<td>macOS version 10.15+</td>
</tr>
<tr>
<td>macOS</td>
<td>AMD Radeon Pro</td>
<td>macOS version 10.15+</td>
</tr>
</tbody>
</table>
## Exit FEMU
To exit FEMU, run `dm poweroff` in the FEMU terminal.
## Next steps
* To learn more about how FEMU works, see the
[Fuchsia emulator (FEMU) overview](/docs/concepts/emulator/index.md).
* To learn more about Fuchsia device commands and Fuchsia workflows, see
[Explore Fuchsia](/docs/get-started/explore_fuchsia.md).