fluxo de dados em um arquivo em um driver de dispositivo linux
Pergunta
Eu sou bastante novo para o dispositivo Linux programmring motorista, mas para fins de depuração, eu gostaria de escrever um fluxo de dados diretamente para um arquivo. Ou talvez eu devesse aks a pergunta de maneira diferente:
Eu tenho um system-on-chip, onde um módulo fornece um fluxo de dados. O módulo tem de ser initlized com um endereço de escrita. Em vez de escrever os dados em memória, eu gostaria de redirecionar o fluxo de dados para esse endereço para um arquivo. Isso também pode ser feito através do espaço do usuário, porque a escrita para arquivo em kernelspace não é recomendado.
Can esboço alguém mais ou menos como fazer isso?
Obrigado, Stefan
Solução
Desde a sua pergunta, eu assumo este é um módulo de hardware escrever diretamente em um buffer de memória. Você sempre precisa de um buffer de memória intermediária no caminho para o arquivo, mas existem várias maneiras de gerenciar isso no seu driver de dispositivo.
O caso mais simples é implementar um driver de dispositivo de caracteres, que retorna os dados para o espaço do usuário através de uma operação de leitura. Sua aplicação userspace que grava o arquivo pode ser tão simples como cat
. O módulo irá escrever em um buffer de memória alocada pelo seu motorista, eo método read
irá copiar dados a partir deste tampão para o buffer de espaço do usuário. Isto é coberto por DMA-Mapping.txt
na documentação do kernel e em Linux Device Drivers (LDD).
Se a taxa de dados é alta (onde a alta é relativo ao desempenho do dispositivo), você precisa considerar uma operação de leitura mais avançado, onde você bloquear as páginas do pedido read
na memória, e as gravações do módulo diretamente para essas páginas. Isso é mais complicado, ea documentação em LDD sobre esta área é bastante antigo. Eu aconselho a estudar a origem dos controladores de captura de vídeo no kernel para entender isso.
Se o controlador tem mais tipos de comunicação para levar a cabo, você pode querer usar Netlink .