启动 Fuchsia 模拟器

本指南介绍了如何在您的机器上设置和启动 Fuchsia 模拟器 (FEMU)。

具体步骤如下:

  1. 前提条件
  2. 为 FEMU 构建 Fuchsia
  3. 启用虚拟机加速(可选)
  4. 启动 FEMU
  5. 探索 FEMU

1. 前提条件

运行 FEMU 需要您已完成以下指南:

2. 为 FEMU 构建 Fuchsia

如需运行 FEMU,您首先需要构建一个支持模拟器环境的 Fuchsia 系统映像。本指南以 x64 作为主板,以 workbench_eng 作为产品为例。(如需详细了解支持的开发板和产品,请参阅 Fuchsia 模拟器页面。)

如需构建 FEMU Fuchsia 映像,请执行以下操作:

  1. 设置 Fuchsia build 配置:

    fx set workbench_eng.x64 --release
  2. 构建 Fuchsia:

    fx build

3. 启用虚拟机加速(可选)

仅限 Linux)大多数 Linux 机器通过 KVM 支持虚拟机加速,这可大幅提升模拟器的性能和易用性。

  1. 如果您的机器上可以使用 KVM,请将自己添加到机器上的 kvm 群组:

    sudo usermod -a -G kvm ${USER}
  2. 退出设备上的所有桌面会话,然后重新登录。

  3. 如需验证 KVM 是否已正确配置,请运行以下命令:

    if [[ -r /dev/kvm ]] && grep '^flags' /proc/cpuinfo | grep -qE 'vmx|svm'; then echo 'KVM is working'; else echo 'KVM not working'; fi

    验证此命令是否会输出以下行:

    KVM is working
    

    如果您看到 KVM not working,可能需要重启机器才能使权限变更生效。

4. 启动 FEMU

启动软件包服务器

在启动模拟器之前,请先启动软件包服务器。

如需启动软件包服务器,请运行以下命令:

fx serve

此命令运行后不会终止,而是会使 Fuchsia 软件包服务器在宿主机上保持运行状态(除非关闭终端或在终端上按 Ctrl+C 键,这会终止该命令)。

或者,您也可以将 fx serve 进程置于后台。

启动模拟器

在 Linux 计算机上启动 Fuchsia 模拟器。

如果您的机器位于防火墙后面,您可能需要应用一些额外的配置,以允许模拟器访问网络。这通常通过运行“upscript”来实现,该脚本会为当前进程设置接口和防火墙访问规则。 如果您使用的是公司网络,请咨询内部网络团队,看看他们是否有现成的 upscript 可供您使用。

不过,即使您没有使用防火墙,仍需要进行一些配置才能启用 tun/tap 网络。//scripts/start-unsecure-internet.sh 中的示例升级脚本应该适用于大多数非企业用户。

如需启动模拟器,请执行以下操作:

  1. 启动新终端。

  2. 如需配置 upscript,请运行以下命令:

    ffx config set emu.upscript FUCHSIA_ROOT/scripts/start-unsecure-internet.sh
    • start-unsecure-internet.sh 是一个 upscript 示例。
    • FUCHSIA_ROOT 是 Fuchsia 目录的路径。
  3. 启动可访问外部网络的模拟器:

    ffx emu start --net tap

    --net 指定模拟器的网络模式。 --net tap 附加到 Tun/Tap 接口。

    或者,您也可以启动无法访问外部网络的模拟器:

    ffx emu start --net none

    启动模拟器会打开一个新窗口,其标题为 Fuchsia 模拟器

5. 探索 FEMU

如需将 Fuchsia 模拟器发现为正在运行的 Fuchsia 设备,请运行以下命令:

ffx target list

此命令会显示类似于以下内容的输出:

$ ffx target list
NAME                SERIAL       TYPE                 STATE      ADDRS/IP                            RCS
fuchsia-emulator    <unknown>    workbench_eng.x64    Product    [fe80::866a:a5ea:cd9e:69f6%qemu]    N

fuchsia-emulator 是 Fuchsia 模拟器的默认节点名称。

ffx target list 的输出会受到 --net 选项的影响,具体如下:

  • --net none 会停用网络,导致 ffx target list 无法发现设备。

  • --net tap--net user 允许设备在运行 ffx target list 时可被发现。

后续步骤

如需详细了解 Fuchsia 设备命令和 Fuchsia 工作流,请参阅探索 Fuchsia

附录

本部分提供了其他 FEMU 选项。

手动添加目标

如果在运行 ffx target list 后未找到任何目标,您可以运行以下 ffx 命令手动添加目标:

ffx target add device-ip:device-port

查看所有可用标志

如需查看模拟器支持的标志的完整列表,请运行以下命令:

ffx emu start --help

在没有 GUI 支持的情况下运行 FEMU

如果您不需要图形或在远程工作流下工作,则可以在无头模式下运行 FEMU:

ffx emu start --headless

重新启动 FEMU

如需重启 FEMU,请运行以下 ffx 命令:

ffx target reboot

停止 FEMU

如需停止 FEMU,请运行以下 ffx 命令:

ffx emu stop

配置模拟器网络

本部分介绍了如何使用 TUN/TAP 在 Linux 机器上为 FEMU 配置 IPv6 网络。

如需使用 TAP 网络在 FEMU 中启用网络,请执行以下操作:

  1. 设置 tuntap

    sudo ip tuntap add dev qemu mode tap user $USER
  2. qemu 启用网络:

    sudo ip link set qemu up

为 FEMU 指定 GPU 模式(实验性)

默认情况下,FEMU 启动器使用 SwiftShader Vulkan ICD 进行主机图形渲染。借助 --gpu 标志,您可以将模拟器设置为使用主机 GPU 硬件进行渲染。请参阅以下选项:

GPU 模拟方法 说明 标志
SwiftShader 使用 SwiftShader 库来模拟 GPU 处理。 这是默认模式。 ffx emu start --gpu swiftshader_indirect
硬件(主机 GPU) 直接使用宿主机的 GPU 执行 GPU 处理。 ffx emu start --gpu host
自动 如果硬件 GPU 可用,则解析为 host;如果硬件 GPU 不可用,则解析为 swiftshader_indirect ffx emu start --gpu auto

hostauto GPU 仿真模式仅供实验性使用,目前不受官方支持。使用这两种模式时,您可能会看到图形伪影、测试失败或模拟器崩溃。