Pregunta

Soy bastante nuevo en programmring controlador de dispositivo Linux, pero para fines de depuración, me gustaría escribir un flujo de datos directamente a un archivo. O quizás debería AKS la pregunta de otra manera:

Tengo un sistema en chip, donde un módulo proporciona un flujo de datos. El módulo tiene que ser initlized con una dirección de escritura. En lugar de escribir los datos en la memoria, me gustaría volver a dirigir el flujo de datos a esa dirección a un archivo. Esto también podría hacerse a través del espacio de usuario, ya que escribir en el archivo de kernelspace no se recomienda.

Puede alguien más o menos esbozar cómo hacer esto?

Gracias, Stefan

¿Fue útil?

Solución

A partir de su pregunta, supongo que esto es un módulo de hardware escribir directamente en un búfer de memoria. Que siempre se necesita un búfer de memoria intermedia en el camino hacia el archivo, pero hay varias maneras de manejar esto en el controlador de dispositivo.

El caso más sencillo es implementar un controlador de dispositivo de caracteres, que devuelve los datos al espacio de usuario a través de una operación de lectura. La aplicación de espacio de usuario que escribe en el archivo puede ser tan simple como cat. Su módulo escribirá en un búfer de memoria asignada por el controlador, y el método read copiará los datos de este búfer en el búfer de espacio de usuario. Esto está cubierto por DMA-Mapping.txt en la documentación del núcleo y en Linux controladores de dispositivo (LDD).

Si la velocidad de datos es alta (donde la alta es en relación con el rendimiento del dispositivo), tendrá que tener en cuenta una operación de lectura más avanzada, donde se bloquea las páginas de la solicitud read en la memoria, y escribe el módulo directamente a esas páginas. Esto es más complicado, y la documentación en LDD en esta zona es bastante antiguo. Te aconsejo estudiar el origen de los controladores de captura de vídeo en el núcleo de entender esto.

Si el conductor tiene más tipos de comunicación para llevar a cabo, es posible que desee utilizar Netlink.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top