• # Et la fonction est...

    Posté par . 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_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.