Fuchsia 模拟器

Fuchsia 模拟器 (FEMU) 是 Fuchsia 的默认模拟器。借助 FEMU,您无需使用实体 Fuchsia 设备即可测试 Fuchsia 组件和应用。

FEMU 包含在 Fuchsia 源代码树中。FEMU 由 jiri 下载(或更新),作为 jiri updatejiri run-hooks 的一部分,并提取到 Fuchsia 源代码树的 /prebuilt/third_party/aemu 目录中。

您可以使用 ffx emu 启动 FEMU。

FEMU、AEMU 和 QEMU

FEMU 基于 Android 模拟器 (AEMU),后者是 QEMU 的一个分支 - 在某些情况下(例如调试 Zircon 内核),您应改用 QEMU。

由于存在旧版问题,代码和文档中可能包含对 AEMU 的引用。

调试 Zircon 内核

如果您想调试 Zircon 内核,应改用 fx qemu。如需了解详情,请参阅使用 QEMU 调试内核。本部分面向内核开发者。大多数 Fuchsia 开发者不需要使用此工作流。

功能

FEMU 的外观和行为与 Fuchsia 设备类似,但 FEMU 不需要铺砌或刷写。

FEMU 的功能包括:

  • GUI 支持:您可以运行带 GUI 的 Fuchsia(默认)或不带 GUI 的 Fuchsia(使用 --headless 实参)。
  • GPU 支持:您可以运行主机 GPU(默认)并获得完整的 Vulkan 支持,也可以选择使用 SwiftShader 进行软件渲染。
  • 远程开发:您可以通过 Chrome 远程桌面将远程桌面与 FEMU 搭配使用。
  • UEFI/GPT 支持:您可以根据 Fuchsia 的 ABR 方案(使用 --uefi 实参)来近似模拟包含 GPT 分区布局的实体设备。

如需查看支持的标志的完整列表,请执行以下操作:

ffx emu start --help

映像和主板支持

使用 fx set 设置 FEMU 时,FEMU 支持以下主板:

  • x64
  • qemu-arm64

借助 Fuchsia SDK,FEMU 支持预构建的映像,包括:

  • core.x64
  • workbench_eng.x64
  • terminal.qemu-arm64

ARM64 支持 (qemu-arm64) 非常有限,不建议使用。

使用 ffx --machine product list --version <SDK_VERSION> 可查看 SDK 中提供的产品和相应的转移清单的完整列表,使用 ffx product download <TRANSFER_MANIFEST_URL> 可下载这些产品。

网络

--net 标志用于指定模拟器的联网模式。--net 需要一个值来指示要实现的网络类型。

--net 可取的值如下:

  • tap:附加 Tun/Tap 接口。
  • user:通过 SLiRP 设置映射端口。
  • none:停用网络。
  • auto:检查宿主系统的功能,如果可用,则选择 tap;如果 Tap 接口不可用,则选择 user。 默认值为 auto

在 Linux 上,FEMU 通常应使用 --net tap 标志运行,该标志通过模拟 NIC 提供网络。

--net tap--net user 允许在运行 ffx target list 时发现模拟器。--net none 会停用网络,导致模拟器在运行 ffx target list 后无法被发现。

如果使用 ffx emu start --net user 启动模拟器,系统会从主机中选择一个可用的 TCP 端口,并将其转发到模拟器的 SSH 端口。

您可以手动设置 SSH 地址,并使用 fx 工具通过运行以下命令与模拟器互动:

ffx emu start --net user --port-map PORT-NAME:PORT-NUMBER

替换以下内容:

  • PORT-NAME:为端口选择的名称。端口名称的一个示例可以是 ssh
  • PORT-NUMBER:端口号。一个示例端口号是 8022

您可以采用相同的方式设置任何已命名端口。可在虚拟设备规范中找到可映射的端口。

如需验证 fx 工具是否使用了正确的端口,请运行以下命令:

ffx target get-ssh-address

您应该会在 Device name 旁边看到输出的 SSH 地址。

如需通过 SSH 连接到模拟器,请运行以下命令:

fx shell

不支持的 CPU

FEMU 目前无法在以下设备上运行:

  • ARM64 处理器,包括 Apple M1 处理器。
  • AMD 处理器。

支持图形加速的硬件

FEMU 目前支持 Linux 上的 Nvidia Quadro,用于硬件图形加速 (Nvidia Linux 驱动程序)。对于不受支持的 GPU,FEMU 会使用软件渲染器回退。

常见用法

如需启动 FEMU,请完成 Fuchsia 入门指南。

或者,您也可以使用 Fuchsia SDK 和预构建的系统映像。

能够启动 FEMU 后,您可以执行以下任务: