# Ecriture de driver pour linux, discussion kernel-\>userland

**URL:** <https://www.debian-fr.org/t/ecriture-de-driver-pour-linux-discussion-kernel-userland/32308>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:17 UTC](https://www.debian-fr.org/t/ecriture-de-driver-pour-linux-discussion-kernel-userland/32308 "2016-02-21T02:17:30Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![gnthibault](https://www.debian-fr.org/user_avatar/www.debian-fr.org/gnthibault/32/3567_2.png) [@gnthibault](https://www.debian-fr.org/u/gnthibault)\
**Post date:** [Février 21, 2016, 2:17 UTC](https://www.debian-fr.org/t/ecriture-de-driver-pour-linux-discussion-kernel-userland/32308/1 "2016-02-21T02:17:30Z")

</div>

Bonjour,  
Je débute dans la programmation en mode noyau sous linux, et je me frotte actuellement à un problème épineux, je doit attraper une interruption et exécuter une routine d’interruption dont l’adresse se trouve en user land.

Mon problème se situe dans le passage kernel-\>user, en effet, je ne vois pas quel objet système utiliser pour synchroniser un processus user sur un évènement kernel.

Dans l’idéal, il faudrait que le handler d’interruption kernel puisse lancer un nouveau thread dans l’userland avec un pointeur de fonction(en userland) donné.

Voilà, merci de m’aiguiller si vous avez une idée !

---

<div class="post-metadata">

**Author:** ![Dixippe](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/5f8ce5/32.png) [@Dixippe](https://www.debian-fr.org/u/Dixippe)\
**Post date:** [Février 21, 2016, 2:18 UTC](https://www.debian-fr.org/t/ecriture-de-driver-pour-linux-discussion-kernel-userland/32308/2 "2016-02-21T02:18:12Z")

</div>

Bonjour,

c’est un vaste sujet, il faut que tu lises la documentation du noyau pour cela.

Regarde ici [http://oreilly.com/openbook/](http://oreilly.com/openbook/) tu as un livre pour écrire des drivers “linux devices drivers”.

Pour prévenir le userland tu as par exemple la fonction `kill_fasync(&async_queue, SIGIO, POLL_IN);`  
qui envoie un signal dans le userland.

Regarde aussi la fonction `fasync_helper(...;`

Pour enregistrer la réception du signal dans le userland:

```auto
//hope an asynchronous notification, speed up the SIO signal.
    sa.sa_flags=SA_SIGINFO;
    sigemptyset(&sa.sa_mask);
    sa.sa_sigaction = sigio_handler;
```

puis les échanges peuvent se faire par des fonctions read/write ou ioctl…

regarde aussi les sources des programmes sur ton OS préféré 😃

Bon courage.
