3 个版本

0.1.2 2022 年 1 月 27 日
0.1.1 2021 年 6 月 29 日
0.1.0 2021 年 6 月 29 日

#77macOS 和 iOS API

Apache-2.0

62KB
1K SLoC

hv

CI Crates.io Crates.io docs.rs

hv 是 Hypervisor 框架的高级 Rust 绑定。

使用 Rust 在轻量级 Hypervisor 之上构建虚拟化解决方案

  • 完全支持 Hypervisor 框架。
  • 支持 Apple Silicon。
  • 安全 Rust API。

请参阅 仓库 了解最新更改和更新。

要求

hypervisor framework

在运行时,使用 sysctl 确定特定机器上是否有 Hypervisor API 可用。

$ sysctl kern.hv_support
kern.hv_support: 1

为了使用 Hypervisor API,您的应用必须具有 com.apple.security.hypervisor 权限。有关示例,请参阅 example.entitlements

使用以下命令对本地开发进行二进制签名:

$ codesign --sign - --force --entitlements=example.entitlements ./binary

Rust

在最新稳定版 Rust (1.53.0+) 上开发和测试。

请确保已安装 Xcode 并不要忘记运行 xcode-select --install,否则 bindgen 可能会失败,找不到 Hypervisor 头文件。

用法

此 crate 使用 hv-sys

示例

以下是在 Apple Silicon 上基本 "Hello world" 示例。

// Init VM
let vm = Arc::new(hv::Vm::new(std::ptr::null_mut())?);

// Initialize guest memory
vm.map(load_addr, GUEST_ADDR, MEM_SIZE, hv::Memory::READ)?;

// Create VCPU
let cpu = vm.create_cpu()?;

// Set regs
cpu.set_reg(Reg::PC, GUEST_ADDR)?
cpu.set_reg(Reg::X1, GUEST_RESULT_ADDR)?

loop {
    cpu.run().expect("Failed to run CPU");

    let info = cpu.exit_info();
    println!("{:?}", info);

    break;
}

依赖关系

~0–1.9MB
~36K SLoC