本指南介绍了如何在您的机器上设置和启动 Fuchsia 模拟器 (FEMU)。
具体步骤如下:
1. 前提条件
运行 FEMU 需要您已完成以下指南:
2. 为 FEMU 构建 Fuchsia
如需运行 FEMU,您首先需要构建支持模拟器环境的 Fuchsia 系统映像。本指南以主板的 x64 和产品的
workbench_eng 为例。(如需详细了解
受支持的主板和产品,请参阅 Fuchsia 模拟器
页面。)
如需构建 FEMU Fuchsia 映像,请执行以下操作:
设置 Fuchsia 构建配置:
fx set workbench_eng.x64 --release构建 Fuchsia:
fx build
3. 启用虚拟机加速(可选)
(仅限 Linux )大多数 Linux 机器都支持通过 KVM 进行虚拟机加速,这可以大幅提升模拟器的性能和易用性。
如果您的机器上提供 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,可能需要重启机器,才能使权限更改生效。
4. 启动 FEMU
启动软件包服务器
在启动模拟器之前,请先启动软件包服务器。
如需启动软件包服务器,请运行以下命令:
fx serve运行此命令后,该命令不会终止,并且会使 Fuchsia 软件包服务器在宿主机上保持运行状态(除非关闭终端或在终端上按 Ctrl+C,这会终止该命令)。
或者,您可以将 fx serve 进程置于后台。
启动模拟器
在 Linux 机器上启动 Fuchsia 模拟器。
如果您的机器位于防火墙后,您可能需要应用一些额外的配置,以允许模拟器访问网络。 这通常通过运行“upscript”来完成,该脚本会为当前进程设置接口和防火墙访问规则。 如果您使用的是企业网络,请咨询内部网络团队,看看他们是否有现成的 upscript 可供您使用。
不过,即使您没有位于防火墙后,仍然需要进行一些配置才能启用 tun/tap 网络。//scripts/start-unsecure-internet.sh 中的示例 upscript 应该适用于大多数非企业用户。
如需启动模拟器,请执行以下操作:
启动新终端。
如需配置 upscript,请运行以下命令:
ffx config set emu.upscript FUCHSIA_ROOT/scripts/start-unsecure-internet.shstart-unsecure-internet.sh是一个示例 upscript。FUCHSIA_ROOT是 Fuchsia 目录的路径。
启动可访问外部网络的模拟器:
ffx emu start --net tap--net用于指定模拟器的网络模式。--net tap会连接到 Tun/Tap 接口。或者,您也可以启动无法访问外部网络的模拟器:
ffx emu start --net none启动模拟器会打开一个新窗口,标题为 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时发现设备。
后续步骤
如需详细了解 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 中启用网络,请执行以下操作:
设置
tuntap:sudo ip tuntap add dev qemu mode tap user $USER为
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 |
host 和 auto GPU 模拟模式仅供实验性使用 ,目前尚未获得正式支持。使用这两种模式时,您可能会看到图形伪影、测试失败或模拟器崩溃。
输入互动配置文件(鼠标与触摸屏)
Fuchsia 虚拟设备配置文件会根据目标硬件产品的特性配置不同的输入互动模式:
- 鼠标模式 (
mouse) :标准桌面鼠标模拟指针布局。 - 触摸屏模式 (
touch) :模拟互动式触摸屏输入。
引擎兼容性: 模拟器后台虚拟化引擎的选择会限制 输入选项:
- FEMU (
--engine femu) :完全支持mouse和touch输入配置文件。这是默认设置,也是测试智能显示屏或触摸屏设备所必需的。 - QEMU (
--engine qemu) :仅支持mouse指针模拟输入。 如果所选产品软件包默认采用触摸屏虚拟设备配置文件布局,则在--engine qemu下启动该软件包会触发功能警告或执行错误。