是否有类似于 Linux 的 VFIO 的 Windows 用户空间 API 用于为自定义硬件编写驱动程序?

问题描述 投票:0回答:1

作为学习 FPGA 设计的一部分,有一些带有 Xilinx Kintex-7 或 Artix-7 FPGA 的板,其中 FPGA 与安装它们的 PC 具有 PCIe 连接。FPGA 设计向 PC 公开 PCIe 端点,以便:

  • 供应商和子供应商 ID 设置为 Linux 和 Windows 没有任何内置驱动程序的值。
  • PCIe 端点包含 BAR 中的简单内存映射寄存器,有时还包含 DMA 引擎。

在Alma Linux 8下发现,当启用IOMMU时,VFIO API可用于为自定义硬件编写用户级驱动程序,包括DMA的使用。使用 VFIO 为开发提供以下优势:

  1. vfio-pci
    驱动程序绑定到自定义 PCIe 设备后,只需从常规用户进程即可访问 PCIe 设备,而无需任何提升的功能。 bind_device_to_vfio.sh 是创建的脚本,需要
    sudo
    绑定
    vfio-pci
    驱动程序,然后向用户空间应用程序打开的 IOMMU 组文件授予用户权限,以获取对自定义设备的访问权限,并映射PCIe BAR。
  2. 避免需要为自定义设备创建树外内核模块,这意味着:
    • 简化调试;内核模块还没有找到单步执行的方法。
    • 避免污染内核。
    • 启用安全启动后,无需签署树外内核模块。
  3. 启用 IOMMU 后,硬件可以防止 FPGA 或 DMA 软件驱动程序错误,否则会覆盖不正确的物理内存地址。

安装了 FPGA 板的 PC 可以在 Linux 或 Windows(10 或 11)中双启动,并且希望研究为 Windows 和 Linux 编写用户空间驱动程序。

仅供参考,vfio_access.c 是当前在 Linux 下使用的代码,它使用 VFIO,并且希望尝试在 Windows 中执行等效功能。

我曾尝试搜索“Windows 相当于用户空间驱动程序的 Linux VFIO”的变体,但似乎没有找到适用于 Windows 的 API,而是找到了有关在 Linux 主机内运行 Windows VM 的搜索结果。我不确定我是否使用了错误的搜索词,或者 Windows 是否没有提供 VFIO 的等效项。

windows driver equivalent vfio
1个回答
0
投票

我会用“否”回答我的问题,因为 Windows 没有为用户空间驱动程序提供与 Linux VFIO 等效的机制来访问自定义硬件。

查看 DPDK(它在 Linux 下使用 VFIO),Windows 入门指南安装驱动程序部分包含:

运行 DPDK 应用程序需要某些内核模式驱动程序。请参阅 dpdk-kmods 存储库中的

Windows 文档
,了解有关系统设置、驱动程序构建和安装的常见说明。驱动程序未签名,因此必须禁用签名强制。

警告:禁用驱动程序签名强制会削弱操作系统安全性。在生产环境中不鼓励这样做。

Windows 上的 DPDK 移植页面的状态包含:

它需要尚未签名的内核模式驱动程序才能运行(mlx5 除外)。

© www.soinside.com 2019 - 2024. All rights reserved.