# 创建二级虚拟机

本节提供了使用 Qualcomm Linux 编译系统创建虚拟机 (VM) 镜像的步骤。

要将虚拟机与 Qualcomm Linux 一起使用，请确保镜像配方包含虚拟机管理器 (VMM) 工具，并生成 Guest VM 内核和根文件系统镜像。

以下步骤提供了以下操作的分步指南：

> 
> 
> - 包括必要的 VMM 工具，例如已在 Qualcomm Linux 中定义的镜像配方中的 `crosvm` 和 `qemu`。
> - 使用命令编译Guest VM内核和根文件系统镜像。
> - 使用命令启动 Guest VM。

## 设置开发机器

1. 在开发用主机上安装 clang。

    要在主机开发机器上安装 clang，请运行以下命令：

sudo apt install clang-11
        Copy to clipboard
2. 在 Qualcomm Linux 环境中启用 meta-rust 层。

    meta-rust 层提供 Rust 编译器 (rustc) 和软件包管理器 (cargo) 来编译 crosvm（使用 Rust 语言实现）。

    将 meta-rust 层添加到 `meta-qcom-distro/conf/bblayers.conf` 文件中的 EXTRALAYERS。

    打开 `conf/bblayers.conf` 文件并添加层路径至 `EXTRALAYERS` 变量，如下所示：

EXTRALAYERS ?= " \
        ${WORKSPACE}/layers/meta-rust \
        "
        Copy to clipboard
3. 在build中包含来自 meta-rust 的 Rust。

    创建 `meta-qcom-distro/conf/distro/include/rust_version.inc` 文件内容如下：

# include this in your distribution to easily switch between versions
        # just by changing RUST_VERSION variable
        
        RUST_VERSION ?= "1.73.0"
        
        PREFERRED_VERSION_cargo ?= "${RUST_VERSION}"
        PREFERRED_VERSION_cargo-native ?= "${RUST_VERSION}"
        PREFERRED_VERSION_libstd-rs ?= "${RUST_VERSION}"
        PREFERRED_VERSION_rust ?= "${RUST_VERSION}"
        PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUST_VERSION}"
        PREFERRED_VERSION_rust-llvm ?= "${RUST_VERSION}"
        PREFERRED_VERSION_rust-llvm-native ?= "${RUST_VERSION}"
        PREFERRED_VERSION_rust-native ?= "${RUST_VERSION}"
        Copy to clipboard

    将 `rust_version.inc` 文件包含进 `meta-qcom-distro/conf/distro/qcom-wayland.conf` 文件，如下所示：

require conf/distro/include/rust_version.inc
        Copy to clipboard

## 将 crosvm 工具添加到 Qualcomm Linux 镜像

要将 crosvm 工具添加到 Qualcomm Linux 编译的镜像中，请编辑 `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-vm-host.bb` 软件包组配方文件并添加以下代码块：

RDEPENDS:packagegroup-qcom-vm-host:append:qcom-custom-bsp = "\
       crosvm \
       "
    Copy to clipboard

## 编译镜像配方和 Guest VM 镜像

1. 要编译现有的 Qualcomm Linux 镜像配方，请运行 `bitbake <image>` 命令。这包括生成的镜像中的 crosvm 工具。例如，对于 `qcom-console-image`，运行以下命令：

bitbake qcom-console-image
        Copy to clipboard
2. 若要生成 Guest VM 镜像，请运行以下命令：

bitbake multiconfig:qcom-guestvm:qcom-guestvm-image
        Copy to clipboard

### Guest VM artifacts

成功创建 Guest VM 镜像后，您可以找到以下 artifact：

> 
> 
> 1. Guest VM 编译命令会为 Guest VM 镜像创建一个名为 `tmp-qcom-guestvm-glibc` 的文件夹。
> 2. Guest VM 内核和 rootfs 镜像在 `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>` 目录中生成。
> 3. `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/Image` 文件是 Guest VM 内核镜像。
> 4. `tmp-qcom-guestvm-glibc/deploy/images/<machine-name>/qcom-guestvm-image-<machine-name>.ext4` 文件是 Guest VM 根文件系统镜像。
> 5. 在刷写由 `bitbake <image>` 命令创建的镜像并启动设备后，将 Guest VM 内核和根文件系统镜像复制到设备，例如，复制到 `/var/gunyah` 目录。

## 启动 Guest VM

1. 要启动 Guest VM，请使用 crosvm VMM 工具。
2. 在以下命令中，Guest VM 内核和根文件系统镜像来自设备上的 `/var/gunyah` 目录。

crosvm --log-level=debug --no-syslog run --disable-sandbox --hypervisor gunyah --protected-vm-without-firmware \
        --serial=type=stdout,hardware=virtio-console,console,stdin,num=1 --serial=type=stdout,hardware=serial,earlycon,num=1 \
        --root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4 --no-balloon --no-rng --params \
        "earlyprintk=serial panic=0" /var/gunyah/Image
        Copy to clipboard

    - `--root /var/gunyah/qcom-guestvm-image-qcs9100-ride-sx.ext4` 选项指定 GuestVM 的根文件系统的路径。
    - 最后一个参数会 `/var/gunyah/Image` 传递给指定内核镜像路径的 `crosvm` 工具。

有关更多信息，请参阅[启用虚拟化](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-3/virtualization.html)。

Last Published: Jul 24, 2025

[Previous Topic
Persist 分区](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/persist_partition.md) [Next Topic
Qualcomm Linux 的 OTA 更新](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/ota_update_for_qualcomm_linux.md)