Разработчик Джойел Буэно выпустил открытый проект под названием PCIem. Это инструмент для синтетической эмуляции устройств PCIe полностью в пользовательском пространстве. Исходный код решения написан на C и опубликован на GitHub под лицензией MIT.

PCIem — это фреймворк, который создаёт виртуальные устройства PCIe в ядре Linux, используя несколько новых методов для преобразования синтетических карт в легитимные устройства PCI для хост-системы без необходимости использования реального оборудования.

Текущие возможности проекта:

  • поддержка BAR: программная регистрация и управление BAR;

  • точки наблюдения: архитектура, управляемая событиями, с использованием точек наблюдения ЦП для обнаружения доступа;

  • поддержка устаревших IRQ/MSI/MSI-X: полная поддержка прерываний с динамическим запуском;

  • структура возможностей PCI: модульная система возможностей PCI (связанный список в основе);

  • система DMA: операции DMA с поддержкой IOMMU и атомарных операций с памятью;

  • P2P DMA: одноранговый DMA между устройствами с контролем доступа на основе белого списка;

  • определяется пользовательским пространством: возможность реализовать свои прототипы PCIe где угодно.