struct fichier de driver linux
Je suis actuellement en train d'apprendre à écrire Linux pilotes de périphérique et j'ai du mal à comprendre "struct fichier". Je suis en utilisant le livre Linux Pilotes de Périphérique 3e édition pour m'aider.
C'est ce que j'ai compris.
un. struct fichier représente un fichier ouvert ainsi, lorsque l'ouverture est appelée dans le module de pilote de périphérique, le noyau va créer une structure de fichier qui inclut tout ce qui concerne le pilote de périphérique.
b. Si vous souhaitez passer autour de cette instance du pilote de périphérique, puis on a passer un pointeur à la struct fichier qui a été créé par le noyau après l'open()
c. fichier->private_data toujours retourner un pointeur vers l'appareil.
Une autre question c'est le champ "f_pos". Le livre dit que le conducteur peut lire cette valeur si il veut connaître la position courante dans le fichier. C'est ce que je comprends de ça.
d. Si struct foo_dev et si la quantité totale de mémoire utilisée par ce pilote pour stocker des données est X puis f_pos points à la position courante dans ce bloc de mémoire réservée par le pilote.
Combien de ce que j'ai compris, c'est droit, et s'il vous plaît corrigez-moi où je me trompe.
Merci,
Mir
OriginalL'auteur Mir | 2011-01-11
Vous devez vous connecter pour publier un commentaire.
La structure de fichier est créé par le noyau et représente les grains de vue de votre appareil, il permet au noyau de la carte à partir d'un descripteur de fichier de l'appareil.
La structure de fichier ne contient que les données les grains des couches supérieures besoins, ce qui est peu probable d'être tout ce dont vous avez besoin pour votre pilote, si vous avez besoin de plus de stockage pour le suivi de vos appareils d'état (et, en général, vous permettra de), vous devez allouer de la mémoire pour votre structure vous-même, soit dans la fonction d'ouverture ou plus généralement lorsque la détection de votre matériel.
Si vous ne vous allouer du stockage, alors vous pouvez utiliser le fichier->private_data pour vous permettre d'obtenir à partir de la structure de fichier c'est passé à votre pilote en lecture /écriture /etc à votre structure.
La façon dont le fichier->private_data est utilisé est le pilote, le noyau ne la touche pas. Son vient de là pour les pilotes de l'utiliser.
La f_pos champ est un legs du noyau en utilisant la même structure de fichier pour les fichiers et périphériques. C'est un index dans un fichier de la prochaine opération aura lieu, cela dépend de votre appareil si cela fait sens, si votre appareil prend en charge une certaine forme d'accès aléatoire (par exemple, une mémoire ram de l'appareil) puis à l'aide de f_pos et la mise en œuvre de lseek peut avoir du sens, si vous le matériel est séquentiel puis f_pos est normalement hors de propos.
f_pos
avecf_ops
.OriginalL'auteur Andrew Roca
C'est en plus de ce que andrew a dit ...
a) structure de FICHIER est fourni par le noyau, mais il est conçu comme une interface entre le noyau et les applications.
b) En d'autres termes, vous ne pouvez pas passer autour de la structure de FICHIERS entre plusieurs applications pour le partage d'un périphérique. La seule exception où il est possible de partager entre parents & les processus enfants.
Pour accéder à un périphérique ou les pilotes de périphériques simultanément à partir de plusieurs applications, chaque application. doit avoir pour appeler de l'ouvrir sur le périphérique & créer un FICHIER struct de son propre. C'est le pilote que pour permettre l'accès simultané ou non. Le noyau n'a rien à dire ici.
c) private_data est exactement ce qu'il dit. Les données privées de pilote de périphérique. De l'Application ou de la bibliothèque pouvez utiliser ce champ pour communiquer des données qui est très spécifique pour le pilote de périphérique.
OriginalL'auteur philosopher.stoned