1 个不稳定版本
0.1.0 | 2021年12月20日 |
---|
#340 在 硬件支持
每月2,877 次下载
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