Fuchsia 模拟器 (FEMU) 是 Fuchsia 的默认模拟器。借助 FEMU,您无需使用实体 Fuchsia 设备即可测试 Fuchsia 组件和应用。
FEMU 包含在 Fuchsia 源代码树中。FEMU 由 jiri 下载(或更新),作为 jiri update 或 jiri 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 支持以下主板:
x64qemu-arm64
借助 Fuchsia SDK,FEMU 支持预构建的映像,包括:
core.x64workbench_eng.x64terminal.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 list设备的 SSH 地址列在 ADDRS/IP 下。如果未在地址中指定端口,则使用默认 SSH 端口 (22)。
如需通过 SSH 连接到模拟器,请运行以下命令:
fx shell不支持的 CPU
FEMU 目前无法在以下设备上运行:
- ARM64 处理器,包括 Apple M1 处理器。
- AMD 处理器。
支持图形加速的硬件
FEMU 目前支持 Linux 上的 Nvidia Quadro,用于硬件图形加速 (Nvidia Linux 驱动程序)。对于不受支持的 GPU,FEMU 会使用软件渲染器回退。
常见用法
如需启动 FEMU,请完成开始使用 Fuchsia 指南中的步骤。
或者,您也可以使用 Fuchsia SDK 和预构建的系统映像。
能够启动 FEMU 后,您可以执行以下任务: