本指南介绍了如何在计算机上设置和启动 Fuchsia 模拟器 (FEMU)。
相关步骤如下:
1. 前提条件
您需要完成以下指南才能运行 FEMU:
2. 为 FEMU 构建 Fuchsia
如需运行 FEMU,您首先需要构建支持模拟器环境的 Fuchsia 系统映像。本指南以 x64
作为主板,使用 workbench_eng
作为产品示例。
如需构建 FEMU Fuchsia 映像,请执行以下操作:
设置 Fuchsia build 配置:
fx set workbench_eng.x64 --release
构建 Fuchsia:
fx build
如需详细了解支持的开发板和产品,请参阅 Fuchsia 模拟器 (FEMU) 概览页面。
3. 启用虚拟机加速(可选)
(仅限 Linux)大多数 Linux 机器都通过 KVM 支持虚拟机加速,这极大地提高了模拟器的性能和易用性。
如果 KVM 可在计算机上使用,请更新您的组权限以启用 KVM。
Linux
如需在计算机上启用 KVM,请执行以下操作:
将您自己添加到计算机上的
kvm
群组中:sudo usermod -a -G kvm ${USER}
请退出计算机的所有桌面会话,然后重新登录。
如需验证 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
,则可能需要重新启动机器才能使权限更改生效。
macOS
无需针对 macOS 进行额外设置。
macOS 上的 Fuchsia 模拟器使用 Hypervisor 框架,而不是 KVM。
4. 启动 FEMU
启动软件包服务器
在启动模拟器之前,请先启动软件包服务器。
如需启动软件包服务器,请运行以下命令:
fx serve
或者,您可以将 fx serve
进程置于后台。
启动模拟器
如需在 Linux 计算机上启动模拟器,请执行以下操作:
Linux
运行以下命令来配置 upscript:
ffx config set emu.upscript FUCHSIA_ROOT/scripts/start-unsecure-internet.sh
start-unsecure-internet.sh
是一个上脚本示例。FUCHSIA_ROOT
是 Fuchsia 目录的路径。
如果您的计算机设有防火墙,您可能需要应用一些其他配置,以允许模拟器访问网络。这通常通过运行“upscript”来实现,该脚本为当前进程设置接口和防火墙访问规则。如果您使用的是公司网络,请与您的内部网络团队联系,了解他们是否有现成的脚本可供您使用。
如果您未受防火墙保护,则仍需进行一些配置才能启用 tun/tap 网络。
FUCHSIA_ROOT/scripts/start-unsecure-internet.sh
处的上脚本示例应该适用于大多数非公司用户。如需启动能够访问外部网络的模拟器,请运行以下命令:
ffx emu start --net tap
--net
用于指定模拟器的网络模式。--net tap
会附加到 Tun/Tap 接口。或者,如需在无法访问外部网络的情况下启动模拟器,请运行以下命令:
ffx emu start --net none
启动模拟器会打开一个标题为 Fuchsia Emulator 的新窗口。模拟器完成启动后,您将返回到命令提示符窗口,模拟器在后台运行。
macOS
如需在 macOS 上启动 FEMU,请执行以下操作:
启动 FEMU:
ffx emu start
如果您在 macOS 上首次启动 FEMU(包括重新启动后),系统会弹出一个窗口,询问您是否要允许
aemu
进程在计算机上运行。点击 Allow(允许)。此命令将打开一个标题为 Fuchsia Emulator 的新窗口。 模拟器完成启动后,您会返回到命令提示符,而模拟器会在后台运行。
(可选)如果您需要指定已启动的 Fuchsia 模拟器,可以在同一终端中运行
fx set-device
命令:fx set-device NAME
替换以下内容:
NAME
:使用ffx emu list
或ffx target list
命令输出中的所需值。fuchsia-emulator
为默认值。
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
时可检测到设备。
手动添加目标
如果在运行 ffx target list
后未找到目标,则可能需要运行 ffx target add
来手动添加目标。
ffx target add device-ip:device-port
后续步骤
如需详细了解 Fuchsia 设备命令和 Fuchsia 工作流,请参阅探索 Fuchsia。
附录
本部分提供了额外的 FEMU 选项。
查看所有可用标志
ffx emu start --help
在不支持 GUI 的情况下运行 FEMU
如果您不需要图形或在远程工作流下工作,可以在无头模式下运行 FEMU:
ffx emu start --headless
重新启动 FEMU
如需重新启动 FEMU,请运行以下 ffx
命令:
ffx target reboot
停止 FEMU
如需停止 FEMU,请运行以下 ffx
命令:
ffx emu stop
配置 IPv6 网络
本部分介绍了如何使用 TUN/TAP 在 Linux 计算机上为 FEMU 配置 IPv6 网络。
Linux
如需使用点按网络在 FEMU 中启用网络,请执行以下操作:
设置
tuntap
:sudo ip tuntap add dev qemu mode tap user $USER
为
qemu
启用网络:sudo ip link set qemu up
macOS
使用 macOS 时无需进行额外的 IPv6 网络设置。
用户网络 (SLIRP) 是 macOS 上 FEMU 的默认网络设置。虽然此设置不支持 Fuchsia 设备发现功能,但您仍然可以使用 fx
工具(例如 fx ssh
)与您的 FEMU 实例进行交互。
为 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 |
host
和 auto
GPU 模拟模式仅供实验性使用,目前尚未获得官方支持。使用这两种模式时,您可能会看到图形伪影、测试失败或模拟器崩溃。