Question

Je suis assez nouveau pour le pilote de périphérique Linux programmring, mais à des fins de débogage, je voudrais écrire un flux de données directement dans un fichier. Ou peut-être que je devrais AKS différemment la question:

I ai un système sur puce, où un module fournit un flux de données. Le module doit être initlized avec une adresse d'écriture. Au lieu d'écrire les données en mémoire, je voudrais rediriger le flux de données à cette adresse à un fichier. Cela pourrait aussi se faire via l'espace utilisateur, parce que l'écriture à déposer en est pas recommandé dans l'espace noyau.

Quelqu'un peut-il esquisser à peu près comment faire?

Merci, Stefan

Était-ce utile?

La solution

A partir de votre question, je suppose que c'est un module matériel écrit directement dans une mémoire tampon. Vous aurez toujours besoin d'un tampon de mémoire intermédiaire sur le chemin vers le fichier, mais il y a plusieurs façons de gérer dans votre pilote de périphérique.

Le cas le plus simple est de mettre en oeuvre un pilote de périphérique en mode caractère, qui renvoie les données à l'espace utilisateur par l'intermédiaire d'une opération de lecture. Votre demande userspace qui écrit dans le fichier peut alors être aussi simple que cat. Votre module écrire dans un tampon de mémoire allouée par votre pilote, et la méthode de read copie les données de ce tampon dans la mémoire tampon de l'espace utilisateur. Ceci est couvert par DMA-Mapping.txt dans la documentation du noyau et de pilotes de périphériques Linux (le LDD).

Si le débit de données est élevé (où haute est par rapport à la performance de l'appareil), vous devrez envisager une opération de lecture plus avancée, où vous verrouillez les pages de la demande de read en mémoire, et le module écrit directement à ces pages. Ceci est plus complexe, et la documentation dans ce domaine ldd est assez vieux. Je vous conseille d'étudier la source des pilotes de capture vidéo dans le noyau pour le comprendre.

Si votre pilote a plus de sortes de communication pour mener à bien, vous pouvez utiliser

scroll top