#虚拟化 #模拟

bin+lib qemu

QEMU 二进制安装程序

18 个版本

9.0.0-v02024 年 6 月 3 日
8.2.2-v02024 年 3 月 11 日
8.2.0-v12024 年 1 月 10 日
8.1.3-v32023 年 12 月 19 日
0.1.6 2022 年 11 月 5 日

#3模拟器

Download history 167/week @ 2024-05-01 141/week @ 2024-05-08 130/week @ 2024-05-15 131/week @ 2024-05-22 176/week @ 2024-05-29 133/week @ 2024-06-05 108/week @ 2024-06-12 105/week @ 2024-06-19 96/week @ 2024-06-26 99/week @ 2024-07-03 98/week @ 2024-07-10 135/week @ 2024-07-17 139/week @ 2024-07-24 102/week @ 2024-07-31 119/week @ 2024-08-07 33/week @ 2024-08-14

426 每月下载量
用于 66 crates

GPL-2.0-only

135KB
2K SLoC

qemu

此 crate 提供了 QEMU 二进制安装程序。您可以使用它来安装 QEMU 系统和用户模式模拟器,并在您的代码中使用它们。

目录

依赖项

要安装此 crate,您需要构建系统 QEMU 所需的所有依赖项。有一些包始终是必需的。更新后的列表可以在 这里 找到。截至 QEMU 7.3,您可以使用以下特定于发行版的命令安装所需的软件包。如果您在构建过程中遇到任何其他问题,请尝试检查您平台上的 构建说明。如果您无法解决问题,请在此处提交问题!

在 Ubuntu 上安装所需依赖项

$ sudo apt-get install git libglib2.0-dev libfdt-dev \
    libpixman-1-dev zlib1g-dev ninja-build

在 Fedora 上安装所需依赖项

$ sudo dnf install git glib2-devel libfdt-devel \
    pixman-devel zlib-devel bzip2 ninja-build python3

安装

要安装 QEMU 二进制文件(有关自定义构建的说明,请参阅功能标志部分)

cargo install qemu --features=binaries,lto,plugins

使用方法

有关启用目标的信息,请参阅功能标志部分,但一旦安装了软件,您就可以使用二进制文件了!

Rust 可执行包装器用于用户模拟器

每个 qemu 程序的二进制发行版都提供了 crate,它们基本上都实现了此模式。此可执行文件将作为包装器运行 qemu-aarch64,并将命令行参数和 stdio 传递给可执行文件。现在我们有了直接在 Rust 中可用的二进制文件,所以一切皆有可能!

Cargo.toml

[package]
name = "qemu-aarch64"
version = "0.1.0"
edition = "2021"
description = "QEMU binary installer for qemu-aarch64"
license = "MIT"

# See more keys and their definitions at https://doc.rust-lang.net.cn/cargo/reference/manifest.html
[dependencies]
memfd-exec = "2.1.0"
qemu = { version = "9.0.0", features = ["qemu-aarch64"] }
use memfd_exec::{MemFdExecutable, Stdio};
use qemu::QEMU_AARCH64_LINUX_USEr;

use std::env::args;

fn main() {
    let qemu = QEMU_AARCH64_LINUX_USEr;
    let mut args: Vec<String> = args().collect();
    args.remove(0);
    MemFdExecutable::new("qemu-aarch64", qemu)
        .args(args)
        .stdin(Stdio::inherit())
        .stdout(Stdio::inherit())
        .stderr(Stdio::inherit())
        .spawn()
        .expect("Failed to start qemu process")
        .wait()
        .expect("Qemu process failed");
}

功能标志

此 crate 的功能标志提供了对 QEMU 配置选项的接口。默认情况下,所有标志都设置为与 QEMU 的 configure 脚本设置一样,但目标除外(请参阅 重要说明)。以下是如何将此 crate 配置为依赖项的一些示例

仅使用默认选项安装 qemu-x86_64 用户模式模拟器

这将使 qemu-x86_64 二进制文件可用。

qemu = { version = "9.0.0", features = ["qemu-x86_64"] }

安装经过优化的 qemu-x86_64 用户模式模拟器

这将使 qemu-x86_64 二进制文件可用,但使用 lto 进行剥离和优化。

qemu = { version = "9.0.0", features = ["qemu-x86_64", "lto", "strip"]

使用自定义选项安装 qemu-system-arm 模拟器

我们还可以选择性地启用功能。只有在确实需要时才使用此功能!如果默认情况下已经可用,则它们都将被启用!有关配置选项的更多详细信息,请参阅qemu 文档

贡献

欢迎任何原因的贡献!

依赖项

~0–2.6MB
~44K SLoC