J'ai un périphérique PCIe qui enverra une interruption matérielle lorsqu'un tampon de données est prêt à être lu. Je crois que la meilleure approche pour cela est d'utiliser des signaux, mais je ne suis pas tout à fait sûr de la manière. Ce que je crois devoir faire est le suivant :
- Enregistrer le PID de l'application de l'espace utilisateur pour que le pilote sache où envoyer le signal
- Dans le gestionnaire d'interruption du pilote de périphérique PCIe, envoyer un signal à l'application de l'espace utilisateur
- Dans l'application de l'espace utilisateur, mettre en œuvre une fonction de gestionnaire de signal pour traiter le signal
Je ne suis pas sûr de comment faire l'une ou l'autre de ces choses. Comment/Où enregistrer le PID de l'application de l'espace utilisateur ? Comment envoyer un signal à ce PID spécifique à partir du gestionnaire d'interruption du pilote (je crois devoir utiliser la commande kill mais je suis plus intéressé par la syntaxe d'obtention du PID) ? Comment faire attendre l'application de l'espace utilisateur le signal après avoir enregistré son PID ? Est-il possible de permettre à l'application de l'espace utilisateur de continuer à s'exécuter après avoir enregistré son PID, d'exécuter la fonction de gestionnaire de signal lorsqu'un signal est reçu, et de reprendre son exécution là où elle était avant l'arrivée du signal ? (similaire au fonctionnement d'un ISR)