1 个不稳定版本

0.1.0 2021年12月20日

#340硬件支持

Download history 1166/week @ 2024-03-15 920/week @ 2024-03-22 865/week @ 2024-03-29 754/week @ 2024-04-05 712/week @ 2024-04-12 853/week @ 2024-04-19 562/week @ 2024-04-26 560/week @ 2024-05-03 853/week @ 2024-05-10 1013/week @ 2024-05-17 757/week @ 2024-05-24 730/week @ 2024-05-31 751/week @ 2024-06-07 698/week @ 2024-06-14 873/week @ 2024-06-21 476/week @ 2024-06-28

每月2,877 次下载

Apache-2.0 OR BSD-3-Clause

160KB
4K SLoC

vfio-ioctls

设计

VFIO 驱动框架 提供了直接设备访问的统一API。它是一个IOMMU/设备无关的框架,用于在安全、IOMMU受保护的环境中向用户空间公开直接设备访问。此框架用于多个设备,如GPU、网络适配器和计算加速器。通过直接设备访问,虚拟机或用户空间应用程序可以直接访问物理设备。

VFIO框架最初是在Linux系统上开发的,后来微软HyperVisor技术提供了一个兼容的实现。因此,VFIO框架同时支持Linux和微软HyperVisor。

vfio-ioctls crate 是对VFIO API的安全包装。它提供了三类结构体

  • VfioContainer:对VFIO容器对象的包装,充当容器对象以将VfioDevice对象与IOMMU域相关联。
  • VfioDevice:对VFIO设备对象的包装,提供访问底层硬件设备的方法。
  • VfioIrq/VfioRegion:描述了VfioDevice对象的特性和资源。

使用方法

vfio-ioctls crate 可用于支持以下使用场景

  • 基于Linux KVM的直接设备分配给虚拟机,使用默认功能。
  • 基于Microsoft HyperVisor的直接设备分配给虚拟机,使用--no-default-features --features=mshv
  • 用户模式设备驱动程序,使用--no-default-features

首先,将以下内容添加到您的Cargo.toml中

vfio-ioctls = "0.1"

接下来,将以下内容添加到您的crate根目录中

extern crate vfio_ioctls;

默认情况下,vfio-ioctls已启用kvm功能。您可以通过default-features = false关闭默认功能。要启用功能mshv

vfio-ioctls = { version = "0.1", default-features = false, features = ["mshv"]}

示例

为用户模式驱动程序创建VFIO设备对象,

use std::sync::Arc;
use vfio_ioctls::{VfioContainer, VfioDevice};

fn create_vfio_device() {
  // TODO: change to your device's path
  let device_path = "/sys/bus/pci/devices/00:03.0";
  let vfio_container = Arc::new(VfioContainer::new(()).unwrap());
  let vfio_dev = VfioDevice::new(&Path::new(device_path), vfio_container.clone()).unwrap();
  let irqs = vfio_dev.max_interrupts();

  assert!(irqs > 0);
}

许可

此代码受Apache-2.0或BSD-3-Clause许可。

依赖关系

~1–2.1MB
~42K SLoC