Repolode
cakehonolulu

cakehonolulu/pciem

一个 Linux 内核框架,可在用户空间实现虚拟 PCIe 设备,无需真实硬件即可开发和测试驱动。

Star
375
Fork
19
未关闭 Issue
0
最近提交
20天前

这是什么?

PCIem 可以在 Linux 内核中创建合成的 PCIe 设备,宿主机内核会将其识别为正常的 PCI 设备。它不同于通过 QEMU 或 vfio-user 把模拟硬件暴露给虚拟机的方案,设备直接挂在宿主机的 PCIe 总线上,真实的内核驱动可以在同一台机器上直接绑定并运行。

设备逻辑运行在用户空间,通过 /dev/pciem 设备文件与内核框架通信。框架支持创建 BAR 并追踪 MMIO 访问,支持传统中断、MSI 和 MSI-X 中断注入,提供 PCI capability 机制,并支持内核与用户空间设备之间感知 IOMMU 的 DMA 访问。点对点 DMA 目前仍处于预览阶段,并带有基于白名单的访问控制。

项目要求 Linux 6.6 及以上内核、gcc-12,支持 amd64、i386、aarch64 和 riscv 架构。示例设备包括 Bochs BGA 显示卡、NVMe 控制器、Intel HDA 声卡和 E1000 网卡。

核心功能

  • 01创建 PCI BAR,并由用户空间监控 MMIO 读写。
  • 02向宿主机注入传统中断、MSI 和 MSI-X 中断。
  • 03提供 PCI capability 框架用于设备配置。
  • 04在内核与用户空间设备之间进行感知 IOMMU 的 DMA 传输。
  • 05设备完全在用户空间实现,通过 /dev/pciem 对外提供接口。

适用场景

  • 在没有实际硬件的情况下开发和测试 PCIe 设备驱动。
  • 原型验证新的 PCI 设备模型,观察真实内核驱动与其交互的表现。
  • 基于模拟设备调试 NVMe、音频、网络或显示驱动。

使用前须知

  • 需要 Linux 内核 6.6 或更新版本以及 gcc-12 才能构建。
  • 点对点 DMA 支持仍处于初步阶段。
  • 内核组件采用 GPLv2 许可证,属于 copyleft 许可。

标签

常见问题

pciem 是什么?
一个 Linux 内核框架,可在用户空间实现虚拟 PCIe 设备,无需真实硬件即可开发和测试驱动。 PCIem 可以在 Linux 内核中创建合成的 PCIe 设备,宿主机内核会将其识别为正常的 PCI 设备。它不同于通过 QEMU 或 vfio-user 把模拟硬件暴露给虚拟机的方案,设备直接挂在宿主机的 PCIe 总线上,真实的内核驱动可以在同一台机器上直接绑定并运行。
pciem 可以免费使用吗?用的什么许可证?
pciem 以 GPL-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
pciem 还在维护吗?
活跃维护中。pciem 最近一次提交是在 2026年9月30日。
pciem 适合用来做什么?
在没有实际硬件的情况下开发和测试 PCIe 设备驱动。 原型验证新的 PCI 设备模型,观察真实内核驱动与其交互的表现。 基于模拟设备调试 NVMe、音频、网络或显示驱动。
在哪里获取 pciem?
源代码和安装说明在 GitHub 上:https://github.com/cakehonolulu/pciem

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目