2010-01-07 12 views
1

Je peux être approcher tout faux mais ...Puis-je configurer Linux SIGUSR1 à partir du noyau?

J'ai un conducteur de périphérique de noyau de Linux qui manipule une interruption externe et effectue actuellement un printk() quand il se produit.

Ce que je voudrais faire est de dire à une application de l'espace utilisateur que cet événement s'est produit afin qu'il puisse se réveiller et faire des choses.

Est-il possible (/ simple,/bonnes pratiques) pour définir le SIGUSR1 à l'intérieur du noyau, puis le capturer à partir de l'espace utilisateur via

signal (SIGUSR1, <handler function>); 

Merci

Répondre

3

Cela ne ressemble pas à une très bonne idée. Si c'est possible, vous devrez en quelque sorte donner au pilote l'identifiant du processus du type d'espace utilisateur afin que le pilote puisse obtenir un signal.

Je créerais un/dev/xxx, l'ouvrirais et le pilote pourrait rendre le descripteur de fichier actif lorsque l'événement se produirait. Peut-être même fournir plus d'informations.

+0

Oui, c'est un bon conseil. Demandez à votre appareil d'enregistrer un périphérique de caractères; le programme userspace ouvre ensuite le nœud de périphérique correspondant et bloque dans 'read' ou' select'; le pilote de périphérique envoie un message (peut-être même un seul octet) à lire lorsque l'interruption se produit et réveille l'application de l'espace utilisateur. – caf

Questions connexes