# 创建二级虚拟机

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

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

以下步骤提供了以下内容：

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

## 设置开发机器。

1. 在开发主机上安装 `clang`：

sudo apt install clang-11
        Copy to clipboard
2. 在 Qualcomm Linux 环境中启用 `meta-rust` 层。`meta-rust` 层提供 Rust 编译器 (rustc) 和软件包管理器 (cargo) 来编译 crosvm（使用 Rust 语言实现）。
3. 将 `meta-rust` 层添加到 `meta-qcom-distro/conf/bblayers.conf` 文件中的 `EXTRALAYERS`，然后打开 `conf/bblayers.conf` 文件并将层路径添加到 `EXTRALAYERS` 变量，如下所示：

EXTRALAYERS ?= " \
        ${WORKSPACE}/layers/meta-rust \
        "
        Copy to clipboard
4. 创建 `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
5. 将 `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 镜像后，您可以找到以下 artifact：

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

## 启动 Guest VM

1. 要启动 Guest VM，请使用 crosvm 工具。
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-70022-3/virtualization.html)。

Last Published: Nov 04, 2025

[Previous Topic
配置](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/configure_properties.md) [Next Topic
使用 capsule 和 OSTree 机制在 Qualcomm Linux 上更新固件和操作系统](https://docs.qualcomm.com/bundle/publicresource/80-70022-27SC/topics/update_fw_and_os_qualcomm_linux_using_capsule_and_ostree_mechanisms.md)