Repolode
cakehonolulu

cakehonolulu/pciem

Фреймворк для ядра Linux, позволяющий создавать виртуальные PCIe-устройства в userspace и тестировать на них драйверы хоста без реального оборудования.

Звёзды
375
Форки
19
Открытые issues
0
Последний коммит
20 дней назад

Что это?

PCIem создает синтетические PCIe-устройства, которые ядро Linux хоста видит как полноценные PCI-устройства. В отличие от решений, предоставляющих эмулируемое оборудование гостевой VM через QEMU или vfio-user, устройство напрямую появляется на шине PCIe хоста, поэтому к нему может подключиться настоящий драйвер ядра и работать на той же машине.

Логика устройства реализуется в userspace и взаимодействует с фреймворком ядра через файл устройства /dev/pciem. Фреймворк поддерживает создание BAR с трассировкой обращений MMIO, генерацию прерываний legacy, MSI и MSI-X, фреймворк PCI capabilities и DMA с учетом IOMMU между ядром и устройством в userspace. Peer-to-peer DMA доступен в предварительной реализации с контролем доступа на основе whitelist.

Проект рассчитан на Linux 6.6 и новее, собирается с помощью gcc-12 и поддерживает amd64, i386, aarch64 и riscv. Среди примеров устройств — видеокарта Bochs BGA, контроллер NVMe, аудиокарта Intel HDA и сетевая карта E1000.

Ключевые возможности

  • 01Создает PCI BAR, позволяя отслеживать чтение и запись MMIO из userspace.
  • 02Генерирует на хосте прерывания legacy, MSI и MSI-X.
  • 03Предоставляет фреймворк PCI capabilities для настройки устройства.
  • 04Выполняет DMA с учетом IOMMU между ядром и устройством в userspace.
  • 05Работает целиком в userspace и предоставляет устройство через /dev/pciem.

Сценарии использования

  • Разработка и тестирование драйверов PCIe-устройств без физического оборудования.
  • Создание прототипа модели PCI-устройства и проверка поведения настоящего драйвера ядра при работе с ней.
  • Эксперименты с драйверами NVMe, аудиоустройств, сетевых карт и дисплеев на эмулируемых устройствах.

Что важно знать

  • Для сборки требуется Linux kernel 6.6 или новее и gcc-12.
  • Поддержка DMA между узлами пока находится на предварительной стадии.
  • Компоненты ядра распространяются по лицензии GPLv2 — лицензии с копилефтом.

Темы

Частые вопросы

Что такое pciem?
Фреймворк для ядра Linux, позволяющий создавать виртуальные PCIe-устройства в userspace и тестировать на них драйверы хоста без реального оборудования. PCIem создает синтетические PCIe-устройства, которые ядро Linux хоста видит как полноценные PCI-устройства. В отличие от решений, предоставляющих эмулируемое оборудование гостевой VM через QEMU или vfio-user, устройство напрямую появляется на шине PCIe хоста, поэтому к нему может подключиться настоящий драйвер ядра и работать на той же машине.
pciem можно использовать бесплатно? Какая у него лицензия?
pciem распространяется с открытым исходным кодом под лицензией GPL-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
pciem всё ещё поддерживается?
Активно поддерживается. Последний коммит в pciem — 30 сент. 2026 г..
Для чего можно использовать pciem?
Разработка и тестирование драйверов PCIe-устройств без физического оборудования. Создание прототипа модели PCI-устройства и проверка поведения настоящего драйвера ядра при работе с ней. Эксперименты с драйверами NVMe, аудиоустройств, сетевых карт и дисплеев на эмулируемых устройствах.
Где скачать pciem?
Исходный код и инструкции по установке — на GitHub: https://github.com/cakehonolulu/pciem

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты