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

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top