Firmware e projeto de hardware open source para um controlador de voo de quadricóptero baseado em ESP32, feito com componentes de uso geral para educação e pesquisa.
cakehonolulu/pciem
Framework para o kernel Linux que permite criar dispositivos PCIe virtuais em espaço de usuário e testar drivers do host sem hardware real.
- Estrelas
- 375
- Forks
- 19
- Issues abertas
- 0
- Último commit
- há 20 dias
O que é?
O PCIem cria dispositivos PCIe sintéticos que o kernel Linux do host reconhece como dispositivos PCI legítimos. Diferentemente de abordagens que expõem hardware emulado a uma VM convidada por meio do QEMU ou do vfio-user, o dispositivo aparece diretamente no barramento PCIe do host, permitindo que um driver real do kernel se conecte a ele e seja executado na mesma máquina.
A lógica do dispositivo é escrita em espaço de usuário e se comunica com o framework do kernel por meio do arquivo de dispositivo /dev/pciem. O framework oferece criação de BARs com rastreamento de acessos MMIO, injeção de interrupções legacy, MSI e MSI-X, um framework de capabilities PCI e DMA com reconhecimento de IOMMU entre o kernel e o dispositivo em espaço de usuário. O DMA peer-to-peer está disponível como recurso preliminar, com controle de acesso baseado em whitelist.
O projeto tem como alvo Linux 6.6 ou posterior, compilado com gcc-12, nas arquiteturas amd64, i386, aarch64 e riscv. Entre os dispositivos de exemplo estão uma placa de vídeo Bochs BGA, um controlador NVMe, uma placa de áudio Intel HDA e uma placa de rede E1000.
Recursos principais
- 01Cria BARs PCI que o espaço de usuário pode monitorar para acompanhar leituras e escritas MMIO.
- 02Injeta interrupções legacy, MSI e MSI-X no host.
- 03Oferece um framework de capabilities PCI para configurar dispositivos.
- 04Realiza DMA com reconhecimento de IOMMU entre o kernel e um dispositivo em espaço de usuário.
- 05Funciona inteiramente em espaço de usuário, expondo o dispositivo por meio de /dev/pciem.
Casos de uso
- Desenvolver e testar drivers de dispositivos PCIe sem hardware físico.
- Criar protótipos de um novo modelo de dispositivo PCI e verificar como um driver real do kernel se comporta com ele.
- Experimentar drivers NVMe, de áudio, rede ou vídeo com dispositivos emulados.
Antes de usar
- Para compilar, é necessário Linux kernel 6.6 ou superior e gcc-12.
- O suporte a DMA ponto a ponto ainda é preliminar.
- Os componentes do kernel são distribuídos sob a GPLv2, uma licença copyleft.
Tópicos
Perguntas frequentes
- O que é pciem?
- Framework para o kernel Linux que permite criar dispositivos PCIe virtuais em espaço de usuário e testar drivers do host sem hardware real. O PCIem cria dispositivos PCIe sintéticos que o kernel Linux do host reconhece como dispositivos PCI legítimos. Diferentemente de abordagens que expõem hardware emulado a uma VM convidada por meio do QEMU ou do vfio-user, o dispositivo aparece diretamente no barramento PCIe do host, permitindo que um driver real do kernel se conecte a ele e seja executado na mesma máquina.
- pciem é gratuito? Qual é a licença?
- pciem é open source sob a licença GPL-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
- pciem ainda é mantido?
- Manutenção ativa. O último commit de pciem foi em 30 de set. de 2026.
- Para que posso usar pciem?
- Desenvolver e testar drivers de dispositivos PCIe sem hardware físico. Criar protótipos de um novo modelo de dispositivo PCI e verificar como um driver real do kernel se comporta com ele. Experimentar drivers NVMe, de áudio, rede ou vídeo com dispositivos emulados.
- Onde consigo pciem?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/cakehonolulu/pciem
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
SDKs e firmware open source para criar seus próprios gadgets Muse em placas ESP32 e dispositivos Linux, como o Raspberry Pi.
Um display de mesa com ESP32 que mostra os limites de uso do Claude Code, com um mascote animado que reage aos prompts e avisa quando uma sessão precisa de interação.
Um emulador open source de ESP32 em Rust que executa firmware real no computador ou no navegador, sem precisar de hardware.
Emulador de sistema completo e host de máquinas virtuais para iOS, macOS e visionOS, baseado no QEMU para executar Windows, Linux e outros sistemas.
App Android que roda localmente no celular jogos de PC das suas bibliotecas Steam, Epic, GOG e Amazon, com saves na nuvem sincronizados entre celular e PC.