- Представлен открытый проект PCIem для синтетической эмуляции PCIe-устройств в пользовательском пространстве.
- PCIem реализует виртуальные устройства PCIe в ядре Linux без необходимости реального оборудования.
- Проект поддерживает управление BAR, прерывания, DMA, P2P DMA и позволяет создавать прототипы PCIe в пользовательском пространстве.
Разработчик Джойел Буэно анонсировал выход PCIem — открытого фреймворка для синтетической эмуляции устройств PCI Express (PCIe), полностью функционирующего в пользовательском пространстве Linux. Исходный код проекта написан на языке C и доступен на GitHub под лицензией MIT, что обеспечивает широкую доступность и возможность адаптации.
PCIem представляет собой инновационный инструмент для создания виртуальных PCIe-устройств посредством нескольких новых методик, позволяющих преобразовывать синтетические карты в полноценные PCI-устройства, распознаваемые хост-системой. При этом отсутствует необходимость использования физического оборудования, что открывает новые возможности для разработки и тестирования.
Ключевые технические возможности проекта включают поддержку Base Address Register (BAR) с функциями программной регистрации и управления, а также продвинутую архитектуру, основанную на точках наблюдения CPU для мониторинга доступа к устройствам. Кроме того, PCIem реализует полноценную поддержку разных типов прерываний — IRQ, MSI и MSI-X с динамическим запуском.
Архитектура проекта построена на модульной системе возможностей PCI, оформленной как связанный список, что облегчает расширение функционала. Важным аспектом является система прямого доступа к памяти (DMA), которая поддерживает IOMMU и атомарные операции, а также обеспечивает реализацию однорангового DMA между устройствами с контролем доступа через белые списки.
Одним из значимых преимуществ PCIem является возможность реализации собственных прототипов PCIe-устройств в произвольном пользовательском пространстве, что значительно упрощает разработку и эксперименты с аппаратным обеспечением без необходимости в дорогостоящем оборудовании.
Таким образом, PCIem выступает универсальным и удобным инструментом для разработчиков программного и аппаратного обеспечения, заинтересованных в быстрых и гибких методах эмуляции PCIe-устройств в Linux-средах, способствуя ускорению инноваций и снижению издержек на тестирование.
