Je suis en train d’écrire une application personnalisée et autorisé à changer le code du gestionnaire d’interruptions dans le kernel Linux.
Je rencontre un thread utilisateur qui attend une interruption. Si cette interruption se produit, la première chose que je veux faire est d’exécuter ce thread utilisateur.
Y at-il un moyen de le faire fonctionner.
Merci
Créez un périphérique de caractères (c’est ce que fait le kernel, il gère les périphériques). Demandez au thread utilisateur de lire à partir de ce périphérique. Il se bloque car il n’y a pas de caractères à lire.
Lorsque l’interruption se produit, envoyez un caractère (ou un message significatif) à ce périphérique depuis votre module. Le fil va se réveiller, lire le message et continuer.
Donnez au fil de discussion une bonne priorité pour qu’il se lève tôt.
Alternativement, vous pouvez simplement kill_proc_info
le thread en attente sur select
ou sleep
et lui envoyer un signal (fonction du kernel kill_proc_info
) et le thread se réveillera. Assurez-vous que le fil gère le signal.
Plutôt que de faire trop de choses en créant un pilote de personnage, il aurait suffi de faire une entrée sysfs. Vous pouvez faire n’importe quel appel bloquant comme lire, sélectionner / interroger sur cette entrée sysfs et l’alimenter à partir de votre gestionnaire d’interruptions.
Le problème intéressant à résoudre pour vous est
etc.