Repolode
cakehonolulu

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