跳到主要内容

使用 QEMU 启动 PolyOS Mobile

PolyOS ❤️ QEMU,本指南将引导您通过 QEMU 虚拟化工具启动 PolyOS Mobile。

QEMU 是一个广泛的支持开源的虚拟化软件,它可以在不同平台上模拟运行操作系统和应用程序。通过使用 QEMU ,您可以创建和管理虚拟机,运行不同硬件架构的操作系统,进行系统快照和实时迁移,并加速执行虚拟化任务,是启动 PolyOS Mobile 的理想选择。

概述

准备工作

在开始之前,为保证 PolyOS Mobile 的工作效率和使用体验,请确保您可以为 PolyOS Mobile 虚拟机分配、满足以下最小要求。

  1. CPU4 核心、8 线程;
  2. 内存8 Gib 内存;
  3. 系统
    • Ubuntu 20.04, 22.04
    • Windows 10/11
备注

我们在本文撰写过程中使用的测试环境为一台具有 i7-10700 CPU @ 2.90GHz16 GiB 内存的物理机。

启动 PolyOS Moille 的步骤

我们只需要 3 个步骤即可在你的计算机上启动 PolyOS Mobile:

  1. 安装由 PolyOS 社区重新分发的 QEMU;
  2. 解压镜像;
  3. PolyOS Mobile,启动!

接下来我们将介绍如何在 Ubuntu 和 Windows 上的详细步骤。

QEMU 支持状态

特性UbuntuWindows
图形
音频
网络
鼠标
键盘
摄像头🔲
物理按键仿真

在 Ubuntu 上启动 PolyOS Mobile

备注

本节内容在 Ubuntu 20.04 上经过测试,应在 21.04、21.10、22.04 等版本上可以正常工作。 在之后的代码案例中,请将/path/to 修改为您本地的安装路径。

安装 QEMU

PolyOS 社区为 Ubuntu 提供了 QEMU 预构建包,可以简单的通过 dpkg 包管理器来安装 PolyOS 社区重新分发的 QEMU。

你可以点击下方的按钮直接获取 PolyOS 官方站点提供的 QEMU 预构建包。

下载 QEMU

现在,我们使用 dpkg 来安装 QEMU:

sudo dpkg -i /path/to/polyos-qemu-riscv64-7.1.0-1.x86_64.deb

QEMU 将被安装至 /opt/qemu-7.1.0 文件夹。

警告

您需要确保一些额外的依赖已被正确安装:

sudo apt-get install libpixman-1-0 libepoxy0 libv4l-0 libpng16-16 \
libsdl2-2.0-0 libsdl2-image-2.0-0 libglib2.0-0 \
libasound2 libpulse0 osspd-alsa \
libusb-1.0-0 \
libncursesw5 \
libgtk-3-0 libgdk-pixbuf2.0-0 \
libx11-6

(可选)配置 QEMU 环境

您可以选择将 /opt/qemu-7.1.0 加入到您的环境变量中。

cat << EOF >> ~/.bashrc
export PATH=/opt/qemu-7.1.0/bin:$PATH
EOF
source ~/.bashrc

解压 PolyOS Mobile 镜像

在解压 PolyOS Mobile 的镜像文件之前,请确保您以获取了正确的 PolyOS Mobile 镜像,如果您没有获取到,请浏览 获取 PolyOS Mobile

我们使用 tar 命令来解压 PolyOS Mobile 镜像文件:

tar -Jxvf /path/to/polyos-mobile-latest.img.tar.xz
信息

镜像文件说明:

  • updater.img:系统更新的镜像,主要包括一些用于系统更新的脚本和二进制文件。
  • system.img:只读的初始系统镜像,主要包括系统库。
  • vendor.img:hdf 驱动平台文件目录。
  • userdata.img:初始数据分区镜像,用于挂载 /data
  • kernel.img: PolyOS Mobile 的二进制内核镜像。
  • ramdisk.imgboot 分区镜像。这是系统镜像的子集,将在内核挂载 system.img 之前挂载,通常只包含一些二进制文件和初始化脚本。

启动 PolyOS Mobile

您可以选择直接使用一个初始化脚本来启动 PolyOS Mobile,该脚本附带在镜像文件中。

sh /path/to/qemu_riscv64_run_linux.sh

在 Windows 上启动 PolyOS Mobile

备注

本节内容在 Windows 10 22H1 上经过测试,应当可以在之后 22H1 之后的构建版本及 Windows 11 上正常工作。 在之后的代码案例中,请将/path/to 修改为您本地的安装路径。

安装 QEMU

PolyOS 社区为 Window 提供了 QEMU 预构建包。

你可以点击下方的按钮直接获取 PolyOS 官方站点提供的 QEMU 预构建包。

下载 QEMU

下载后,双击 .exe 文件直接以默认选项进行安装,QEMU 默认将被安装至 C:\Porgram Files\PolyOS QEMU 文件夹。

(可选)配置 QEMU 环境

您可以选择将 C:\Porgram Files\PolyOS QEMU 加入到您的环境变量中。

$env:Path = "C:\Porgram Files\PolyOS QEMU" + $env:Path
[Environment]::SetEnvironmentVariable("Path", $env:Path, "Machine")
提示

如果上述代码在执行过程中报错,请确保您已经以管理员的身份运行 PowerShell,再重新执行该命令。

解压 PolyOS Mobile 镜像

在解压 PolyOS Mobile 的镜像文件之前,请确保您以获取了正确的 PolyOS Mobile 镜像,如果您没有获取到,请浏览 获取 PolyOS Mobile

我们使用 tar 命令来解压 PolyOS Mobile 镜像文件:

tar -Jxvf /path/to/polyos-mobile-latest.img.tar.xz
信息

如果您的电脑上没有 tar 命令,您可以通过安装 7-zip 或者其他解压软件来获取 tar 文件的解压支持。

启动 PolyOS Mobile

您可以选择直接使用一个初始化脚本来启动 PolyOS Mobile,该脚本附带在镜像文件中。

/path/to/qemu_riscv64_run_windows.ps1
提示

如果上述脚本在执行过程中报错,有可能是因为您的系统禁止运行脚本。请确保您已经以管理员的身份运行 PowerShell,然后输入set-executionpolicy remotesigned执行策略更改,再重新执行脚本。

在 Mac OS 上启动 PolyOS Mobile

备注

本节内容在 Mac OS 13.5.1 M1上经过测试,应在其他版本上可以正常工作。

安装 QEMU

使用homebrew来直接安装qemu即可。关于homebrew,可以参考链接自行安装,不在本手册范围内。

brew install qemu

QEMU 将被安装至brew的文件夹。可以使用下面的命令查看brew的默认安装路径。

brew --prefix

这里,我们的qemu安装到了 /opt/homebrew/Cellar/qemu/8.1.0_1/

(可选)配置 QEMU 环境

您可以选择将 /opt/homebrew/Cellar/qemu/8.1.0_1/ 加入到您的环境变量中。

cat << EOF >> ~/.bashrc
export PATH=/opt/homebrew/Cellar/qemu/8.1.0_1/bin:$PATH
EOF
source ~/.bashrc

解压 PolyOS Mobile 镜像

在解压 PolyOS Mobile 的镜像文件之前,请确保您以获取了正确的 PolyOS Mobile 镜像,如果您没有获取到,请浏览 获取 PolyOS Mobile

我们使用 tar 命令来解压 PolyOS Mobile 镜像文件:

tar -Jxvf /path/to/polyos-mobile-latest.img.tar.xz
信息

镜像文件说明:

  • updater.img:系统更新的镜像,主要包括一些用于系统更新的脚本和二进制文件。
  • system.img:只读的初始系统镜像,主要包括系统库。
  • vendor.img:hdf 驱动平台文件目录。
  • userdata.img:初始数据分区镜像,用于挂载 /data
  • kernel.img: PolyOS Mobile 的二进制内核镜像。
  • ramdisk.imgboot 分区镜像。这是系统镜像的子集,将在内核挂载 system.img 之前挂载,通常只包含一些二进制文件和初始化脚本。

启动 PolyOS Mobile

您同样可以选择使用手动调用 /opt/homebrew/Cellar/qemu/8.1.0_1/bin/qemu-system-riscv64 的方式来启动 PolyOS Mobile。

将下面的脚本复制到新建的文件中并命名为qemu_riscv64_run_mac.sh

这里的cpus 和 memory 可以根据自己机器的配置自行调整。这个脚本和Linux的启动脚本有些许不同,不可直接用Linux的启动脚本。

cpus=4
memory="4096M"

image_path=$PWD

sudo /opt/homebrew/Cellar/qemu/8.1.0_1/bin/qemu-system-riscv64 \
-name PolyOS-Mobile \
-machine virt \
-m ${memory} \
-smp ${cpus} \
-no-reboot \
-netdev user,id=net0 \
-device virtio-net-device,netdev=net0,mac=12:22:33:44:55:66 \
-drive if=none,file=${image_path}/updater.img,format=raw,id=updater,index=3 \
-device virtio-blk-device,drive=updater \
-drive if=none,file=${image_path}/system.img,format=raw,id=system,index=2 \
-device virtio-blk-device,drive=system \
-drive if=none,file=${image_path}/vendor.img,format=raw,id=vendor,index=1 \
-device virtio-blk-device,drive=vendor \
-drive if=none,file=${image_path}/userdata.img,format=raw,id=userdata,index=0 \
-device virtio-blk-device,drive=userdata \
-append "loglevel=1 console=ttyS0,115200 init=init root=/dev/ram0 rw rootwait ohos.boot.hardware=riscv64_virt default_boot_device=10007000.virtio_mmio sn=8823456789 ohos.required_mount.system=/dev/block/vdb@/usr@ext4@ro,barrier=1@wait,required ohos.required_mount.vendor=/dev/block/vdc@/vendor@ext4@ro,barrier=1@wait,required ohos.required_mount.data=/dev/block/vdd@/data@ext4@nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc@wait,reservedsize=104857600" \
-kernel ${image_path}/Image \
-initrd ${image_path}/ramdisk.img \
-vga none \
-vnc :9920 \
-device virtio-gpu-pci,xres=486,yres=864,max_outputs=1,addr=08.0 \
-monitor telnet:127.0.0.1:55556,server,nowait \
-device virtio-mouse-pci \
-device virtio-keyboard-pci \
-device ac97 \
-k en-us \
-display cocoa

exit

连接使用

在Mac上,并不会自动弹出图形化界面来直接使用,这时候我们可以VNC。注意到启动参数有一个monitor telnet:127.0.0.1:55556,这个类似于管理Console。 使用命令

telnet 127.0.0.1 55556

来登录到后台,这里可以输入help查看一些常用命令操作。

我们使用info vnc 命令查看到当前的VNC端口是15980。

(qemu) info vnc
default:
Server: :::15820 (ipv6)
Auth: none (Sub: none)
(qemu) info

我们打开一个VNC Viewer输入IP和端口号即可。IP的查看可以在宿主机输入命令ifconfig查看一下有没有198开头的IP,大概率就是。

疑难解答

如何关闭摄像头?

摄像头通过为 QEMU 模拟器注册新的设备来开启,您可以在启动参数找到 --device virtio-camera-device,v4ldev=/dev/video,通过简单的移除和添加,您可以以此关闭或开启摄像头。

摄像头的性能问题

摄像头功能对系统性能要求较高,建议暂时分配更多的 CPU 资源。

如何关闭物理按键仿真

物理按键仿真使用 GTK 来实现,您可以通过替换启动参数中的 gtk 选项为 sdl 来关闭物理按键仿真。

-display gtk,gl=off
=> -display sdl,gl=off

鼠标延迟过高

鼠标移动可能出现不流畅的情况,可以通过降低电脑分辨率改善。

警告

当分辨率过小时,物理按键仿真将无法工作,会导致黑屏。

受到影响的分辨率:360x720 及以下。