request_threaded_irq() est utilisé dans le pilote, pourquoi ne pas request_irq()? Quelles sont les différences entre les deux?
J'ai posté c'est le fil de discussion au sujet de request_threaded_irq mais je n'ai pas eu de réponse. Je suis donc poster fraîchement.
Je travaille sur un pilote écran tactile capacitif pour touchscree. Il a utilisé request_threaded_irq() au lieu de request_irq(). Je ne pouvais pas comprendre la différence fondamentale entre les deux. Il dit :-
Nom
request_threaded_irq — allouer une ligne d'interruption
Synopsis
int request_threaded_irq (unsigned int irq, irq_handler_t gestionnaire,irq_handler_t thread_fn, unsigned long irqflags, const char *nom_périphérique n', void *dev_id);
Arguments
- irq - ligne d'Interruption d'allouer
- gestionnaire - Fonction à appeler lorsque l'IRQ se produit. Principal gestionnaire pour filetés les interruptions Si NULLE et thread_fn != NULL par défaut principal gestionnaire est installé
- thread_fn - une Fonction appelée dans le gestionnaire d'irq thread Si la valeur est NULL, aucune interruption n'thread est créé
- irqflags - type d'Interruption des drapeaux
- nom_périphérique n' - Un nom ascii pour la revendication de l'appareil
- dev_id - Un cookie passé à la fonction de gestionnaire
le Gestionnaire et Thread_fn arguments sont ceux qui sont source de confusion. Aussi il n'y a pas de fonction de travail défini dans le pilote.
Ici, c'est le pilote qui je suis, qui fait référence à l'.
Quelqu'un peut-il m'aider dans la compréhension de ce?
OriginalL'auteur iSegFault | 2011-10-07
Vous devez vous connecter pour publier un commentaire.
La request_threaded_irq() la fonction a été ajoutée pour permettre aux développeurs de diviser la gestion des interruptions de code en deux parties. Une partie qui s'exécute avec des interruptions bloqué, et une deuxième partie qui peut être fait par un thread du noyau sans interruptions bloqué. Pour les détails du pourquoi, vous pouvez lire ceci:
http://lwn.net/Articles/302043/
Dans votre cas, le pilote est lié à cette:
En passant NULL pour la deuxième arg, "gestionnaire", l'argument de thread_fn, ou la fonction cy8ctmg110_irq_thread() sera appelée lorsque l'interruption est détectée.
Pour vous, le choix qui demande irq fonction dépendra de ce que votre pilote doit faire interrompre le contexte.
OriginalL'auteur Alan H
Un autre aspect important: "Si vous voulez mettre en place un filet gestionnaire d'irq de votre appareil, puis vous le besoin à l'offre de gestionnaire et thread_fn. gestionnaire est encore appelée en dur interrompre contexte et doit vérifier si l'interruption est originaire de l'appareil. Si oui il doit désactiver l'interruption de l'appareil et de retour IRQ_WAKE_THREAD qui réveille le thread de gestion et d'exécuter thread_fn."
Source: https://www.kernel.org/doc/htmldocs/genericirq.html
OriginalL'auteur Andrei Epure