Linux Userspace Opções do driver PCI? (uio_pci_generic)

1

Eu tenho um ponto final Xilinx FPGA PCIe no barramento PCI. O Linux pega o dispositivo muito bem e tudo no lspci parece perfeito.

Minha pergunta é sobre as opções de acesso PCI do espaço do usuário e o que seria bom / ruim.

Opção 1: acesso direto via / sys /.../ resource0

(apenas um eu consegui fazer o trabalho até agora)

Eu posso abrir e mmap dizer /sys/bus/pci/devices/XXXX:XX:XX.X/resource0, em seguida, mmap que e ler / escrever. Só precisa corrigir as permissões primeiro. Minha pergunta é: essa é uma abordagem boa ou ruim? Parece que esta pode não ser a abordagem preferida para acessar o espaço de endereço PCI?

Opção 2: usando o uio_pci_generic

Eu consegui configurar o meu FPGA para que este driver realmente se conecte, o fato de ele exigir interrupções é realmente irritante. E parece que isso dá acesso a nada aceitar interrupções e espaço de memória de configuração? Isso não parece muito útil para mim? Estou faltando alguma coisa?

Opção 3: Escreva meu próprio driver uio

Esta pode ser uma opção razoável, talvez? Eu não tenho certeza de como isso é difícil. Uma vantagem possível disso é que posso ter acesso ao DMA e, portanto, acelerar bastante as coisas.

Opção 4: Escreva um driver PCI linux completamente personalizado

Eu gostaria de evitar essa opção, se possível

Minha pergunta é sobre qual é a melhor abordagem e quais são os pontos negativos da opção 1. Ou há outras abordagens que eu deva considerar?

(Eu estou executando o Debian com o kernel 3.14.15 rt corrigido)

    
por Heinrich du Toit 03.08.2015 / 16:36

1 resposta

1

Opção 1 (acesso direto via / sys /.../ resource0)

Bom para testes e nada de errado com isso funcionalmente, embora não possa fazer nada avançado e sem abstração de camada de driver. Eu acho esse método nojento pela forma como o programa do usuário interage com o sysfs, mas essa pode ser minha opinião pessoal.

Opção 2 (usando uio_pci_generic)

Eu não sei o que o uio_pci_generic faz, mas parece adicionar pouca funcionalidade além de permitir que o seu programa de usuário acesse interrupções herdadas do pci. O que é ruim porque a MSI é preferida de qualquer maneira.

Opção 3 (driver uio personalizado)

Eu não tentei isso, mas suspeito que seja um desperdício de tempo em comparação com a opção 4

Opção 4 (driver de kernel personalizado)

Esta é realmente a melhor solução e a única maneira de fazer as coisas corretamente. Você precisa de um driver para ser capaz de lidar com coisas como DMA e MSI corretamente e ser capaz de fornecer qualquer quantidade de abstração através de um dispositivo de caracteres. No entanto, há ampla documentação sobre como escrever drivers para placas PCI on-line e o kernel fornece muito suporte para o gerenciamento de coisas.

    
por 12.08.2015 / 09:08