Repolode
cakehonolulu

cakehonolulu/pciem

Un framework para el kernel de Linux que permite crear dispositivos PCIe virtuales en el espacio de usuario y probar controladores del host sin hardware real.

Estrellas
375
Forks
19
Issues abiertos
0
Último commit
hace 20 días

¿Qué es?

PCIem crea dispositivos PCIe sintéticos que el kernel de Linux del host reconoce como dispositivos PCI legítimos. A diferencia de los enfoques que exponen hardware emulado a una máquina virtual invitada mediante QEMU o vfio-user, el dispositivo aparece directamente en el bus PCIe del host, por lo que un controlador real del kernel puede asociarse a él y ejecutarse en la misma máquina.

La lógica del dispositivo se escribe en el espacio de usuario y se comunica con el framework del kernel mediante el archivo de dispositivo /dev/pciem. El framework ofrece creación de BAR con trazas de acceso MMIO, inyección de interrupciones legacy, MSI y MSI-X, un framework de capacidades PCI y DMA con reconocimiento de IOMMU entre el kernel y el dispositivo en espacio de usuario. El DMA peer-to-peer está disponible como función preliminar, con control de acceso basado en listas permitidas.

El proyecto está dirigido a Linux 6.6 y versiones posteriores, se compila con gcc-12 y funciona en amd64, i386, aarch64 y riscv. Entre los dispositivos de ejemplo se incluyen una tarjeta gráfica Bochs BGA, un controlador NVMe, una tarjeta de audio Intel HDA y una tarjeta de red E1000.

Funciones clave

  • 01Crea BAR PCI que el espacio de usuario puede supervisar para detectar lecturas y escrituras MMIO.
  • 02Inyecta interrupciones legacy, MSI y MSI-X en el host.
  • 03Ofrece un framework de capacidades PCI para configurar dispositivos.
  • 04Realiza DMA con reconocimiento de IOMMU entre el kernel y un dispositivo en espacio de usuario.
  • 05Se ejecuta íntegramente en el espacio de usuario y expone el dispositivo mediante /dev/pciem.

Casos de uso

  • Desarrollar y probar controladores de dispositivos PCIe sin hardware físico.
  • Crear un prototipo de un nuevo modelo de dispositivo PCI y comprobar cómo se comporta con él un controlador real del kernel.
  • Experimentar con controladores NVMe, de audio, de red o de pantalla mediante dispositivos emulados.

Antes de usarlo

  • Para compilarlo se necesita Linux kernel 6.6 o posterior y gcc-12.
  • La compatibilidad con DMA entre pares es preliminar.
  • Los componentes del kernel están sujetos a GPLv2, una licencia copyleft.

Temas

Preguntas frecuentes

¿Qué es pciem?
Un framework para el kernel de Linux que permite crear dispositivos PCIe virtuales en el espacio de usuario y probar controladores del host sin hardware real. PCIem crea dispositivos PCIe sintéticos que el kernel de Linux del host reconoce como dispositivos PCI legítimos. A diferencia de los enfoques que exponen hardware emulado a una máquina virtual invitada mediante QEMU o vfio-user, el dispositivo aparece directamente en el bus PCIe del host, por lo que un controlador real del kernel puede asociarse a él y ejecutarse en la misma máquina.
¿pciem es gratuito? ¿Qué licencia tiene?
pciem es open source bajo la licencia GPL-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
¿pciem sigue mantenido?
Mantenimiento activo. El último commit de pciem fue el 30 sept 2026.
¿Para qué puedo usar pciem?
Desarrollar y probar controladores de dispositivos PCIe sin hardware físico. Crear un prototipo de un nuevo modelo de dispositivo PCI y comprobar cómo se comporta con él un controlador real del kernel. Experimentar con controladores NVMe, de audio, de red o de pantalla mediante dispositivos emulados.
¿Dónde consigo pciem?
El código fuente y las instrucciones de instalación están en GitHub: https://github.com/cakehonolulu/pciem

Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.

Proyectos relacionados