作为学习 FPGA 设计的一部分,有一些带有 Xilinx Kintex-7 或 Artix-7 FPGA 的板,其中 FPGA 与安装它们的 PC 具有 PCIe 连接。FPGA 设计向 PC 公开 PCIe 端点,以便:
在Alma Linux 8下发现,当启用IOMMU时,VFIO API可用于为自定义硬件编写用户级驱动程序,包括DMA的使用。使用 VFIO 为开发提供以下优势:
vfio-pci
驱动程序绑定到自定义 PCIe 设备后,只需从常规用户进程即可访问 PCIe 设备,而无需任何提升的功能。 bind_device_to_vfio.sh 是创建的脚本,需要 sudo
绑定 vfio-pci
驱动程序,然后向用户空间应用程序打开的 IOMMU 组文件授予用户权限,以获取对自定义设备的访问权限,并映射PCIe BAR。安装了 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 没有为用户空间驱动程序提供与 Linux VFIO 等效的机制来访问自定义硬件。
查看 DPDK(它在 Linux 下使用 VFIO),Windows 入门指南的安装驱动程序部分包含:
运行 DPDK 应用程序需要某些内核模式驱动程序。请参阅
dpdk-kmods
存储库中的Windows 文档,了解有关系统设置、驱动程序构建和安装的常见说明。驱动程序未签名,因此必须禁用签名强制。警告:禁用驱动程序签名强制会削弱操作系统安全性。在生产环境中不鼓励这样做。
Windows 上的 DPDK 移植页面的状态包含:
它需要尚未签名的内核模式驱动程序才能运行(mlx5 除外)。