Firmware y diseño de hardware de código abierto para un controlador de vuelo de cuadricóptero basado en ESP32, creado con componentes de uso general para educación e investigación.
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
SDKs y firmware de código abierto para crear tus propios gadgets Muse con placas ESP32 y dispositivos Linux como Raspberry Pi.
Una pantalla de escritorio con ESP32 que muestra los límites de uso de Claude Code y una mascota animada que reacciona a los prompts y te avisa cuando una sesión necesita que intervengas.
Emulador open source de ESP32 en Rust que ejecuta firmware real en tu computadora o en el navegador, sin necesidad de hardware.
Emulador de sistema completo y anfitrión de máquinas virtuales para iOS, macOS y visionOS, basado en QEMU para ejecutar Windows, Linux y otros sistemas.
App para Android que ejecuta localmente juegos de PC de tus bibliotecas de Steam, Epic, GOG y Amazon, con partidas guardadas en la nube entre el teléfono y el PC.