Fuchsia 模拟器(FEMU)

Fuchsia 模拟器(FEMU)使您无需 Fuchsia 设备即可测试 Fuchsia 组件和应用。 FEMU 包含在 Fuchsia 源中,并且由 jiri 在执行 jiri updatejiri run-hooks 的同时下载。 FEMU 存放在 Fuchsia 的 /prebuilt/third_party/aemu 路径中。

您可以使用 fx vdl ,通过 fx 来调用 FEMU。或者,您也可以使用 fvdl,通过 Fuchsia IDK 来调用 FEMU。

FEMU 与其他模拟器

{#femu-and-other-emulators}

FEMU 是 Fuchsia 的默认模拟器。FEMU 基于安卓模拟器(AEMU),而安卓模拟器是 QEMU 的一个派生(fork)。由于历史遗留问题,代码和文档中可能会有 AEMU 的参考内容。

在某些情况下,例如模拟 Zircon,您反而必须使用 QEMU。

FEMU 特性 {#femu-features}

FEMU 的外观和行为如同一台 Fuchsia 设备,除了不需要铺设(paving)以外。

FEMU 特性包括:

  • 图形用户界面(GUI)支持:您能够选择使用(默认) GUI 或不使用 GUI 来运行 Fuchsia(通过使用 --headless 参数)。
  • GPU 支持:您能够使用完整支持 Vulkan 的主机 GPU 或通过使用 SwiftShader 来选择软件渲染。
  • 远程开发:您能够通过 FEMU 使用远程桌面,无论是 Chrome 远程桌面,还是通过命令行使用 fx emu-remote 命令。

要查看受支持标记(flag)的完整列表:

  1. fx vdl start --help

要配置这些特性,请查看配置并启动 Fuchsia 模拟器页面。

如果您使用的是 Fuchsia IDK,那么 fvdl 支持与 fx vdl 相同的标记。

FEMU 限制 {#femu-limitations}

FEMU 镜像和板型支持 {#femu-image-and-board-support}

在通过使用 fx set 设置 FEMU 时,FEMU 仅支持下列板型:

  • qemu-x64
  • qemu-arm64

在通过使用 Fuchsia IDK 设置 FEMU 时,您只能选择下列预构建镜像:

  • qemu-x64
  • workstation.qemu-x64-release
  • qemu-arm64

注意:ARM64 的支持非常有限,不推荐。

FEMU 网络 {#femu-networking}

在 Linux 上,Fuchsia 模拟器应当总体上带 -N 标记运行,它可以通过模拟的 NIC 提供网络。为 FEMU 设置网络的操作说明位于设置 Fuchsia 模拟器中。

注意:无 -N 时,您的模拟器将无法通过使用 fx list-devices 而被发现。不过,您可以手动设置 SSH 地址并使用 fx 工具与您的模拟器交互。

如果不带 -N 启动模拟器(即 fx vdl start),那么将会有一个可用的 TCP 端口被选中,并被传送至模拟器的 SSH 端口。当模拟器成功启动时,通过正确 SSH 端口设置 fx 工具的指令将被打印在终端输出中。然后,您就能够手动设置 SSH 设备了:

  1. fx set-device 127.0.0.1:{{ '<var>' }}SSH_PORT{{ '</var>' }}

要验证 fx 使用了正确端口:

  1. fx status

您应当查看打印在 Device name(设备名称)旁边的 SSH 地址。要通过 SSH 进入模拟器:

  1. fx ssh

模拟 Zircon {#emulating-zircon}

如果您只想模拟 Zircon,那么您反而必须使用 fx qemu。请阅读利用 QEMU 调试内核以了解更多内容。这是面向内核开发人员的。大多数 Fuchsia 开发者不需要使用这一工作流程。

FEMU 常见用法 {#femu-common-usage}

要使用 FEMU,您必须首先下载 Fuchsia 源构建 Fuchsia

或者,您可以使用 Fuchsia IDK 和预构建系统镜像。

然后您就能够使用 FEMU 处理如下事宜: