Il faut que tu déclares un wake_queue_head dans ton module. Dans la fonction toto_read, tu mets le processus appelant en attente avec wait_event_interruptible. Et dans ton interruption, enfin là ou tu sais que tes données sont disponibles tu appelles wake_up_interruptible pour réveiller le processus bloqué.
Ces macros sont définies dans include/linux/wait.h dans les sources du noyau. Utiliser les versions interruptibles, ça permet de quitter le processus en attente d'un simple Ctrl-C plutôt que de devoir redémarrer la machine lorsque les choses tournent mal (IT qui n'arrive pas, défaut matériel...).
Je te conseille de passer une demi-journée voire une journée à lire le Linux Device Driver volume 3, ce n'est pas du temps perdu.
# Et la fonction est...
Posté par Benoît Monin . En réponse au message Ecrire un module avec un read bloquant. Évalué à 4.
wait_event_interruptible.Il faut que tu déclares un
wake_queue_headdans ton module. Dans la fonction toto_read, tu mets le processus appelant en attente avecwait_event_interruptible. Et dans ton interruption, enfin là ou tu sais que tes données sont disponibles tu appelleswake_up_interruptiblepour réveiller le processus bloqué.Ces macros sont définies dans include/linux/wait.h dans les sources du noyau. Utiliser les versions interruptibles, ça permet de quitter le processus en attente d'un simple Ctrl-C plutôt que de devoir redémarrer la machine lorsque les choses tournent mal (IT qui n'arrive pas, défaut matériel...).
Je te conseille de passer une demi-journée voire une journée à lire le Linux Device Driver volume 3, ce n'est pas du temps perdu.